hibernate - 使用 JPA 和 Hibernate 进行高效批量/批量插入的 final方法?

标签 hibernate jpa jakarta-ee bulk

虽然这里还有其他类似的问题,但我没有看到任何问题可以解决所有问题或有一个很好的明确答案。本质上,我正在使用 Hibernate 支持的 JPA 在 J2EE 应用程序中构建数据访问和服务层。

应用程序执行大量数据加载/更新操作,我想确保这些操作尽可能有效地进入数据库。正确的答案将用代码解释如何使用大量数据进行插入、更新和理想情况下的合并

  • 在配置或代码中设置受尊重的批量大小,以及如何使用 JPA 对其进行编码(如果可能,不使用原始 Hibernate)
  • 如何以及何时使用 JPA 事务命令/注释来确保高效的内存/一级/二级缓存使用。
  • 向我解释一下这意味着“如果您使用身份标识符生成器,​​Hibernate 将透明地禁用 JDBC 级别的插入批处理” - 这与使用主标识符序列有关吗?
  • 我应该知道的任何问题。

注意我已经问了一些有关 Hibernate 和 J2EE/JPA 的相关问题,如果您有任何要添加的内容,请添加

两者对我来说都是相对较新的技术(请参阅我的其他问题):

How should EntityManager be used in a nicely decoupled service layer and data access layer?

Should raw Hibernate annotated POJO's be returned from the Data Access Layer, or Interfaces instead?

最佳答案

我可以解释有关 Hibernate 在使用身份生成器时禁用批量插入的声明。

为了让 Hibernate 使用身份生成器获取新实体的标识符,它必须实际执行到数据库的插入,然后执行选择来获取该标识符值,因为该值是由数据库在插入时分配的。这与使用序列生成器形成对比。在这种情况下,Hibernate 可以预先获取尽可能多的标识符(如果需要,可以批量获取),并在插入之前将它们分配给要插入的实体。

因此,区别在于用于身份生成器的“插入然后选择”与用于序列的“选择然后插入”。

因此,当使用身份生成器时,Hibernate 必须逐一执行插入,但当使用序列生成器时,Hibernate 可以将它们批量化。

关于hibernate - 使用 JPA 和 Hibernate 进行高效批量/批量插入的 final方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7884765/

相关文章:

java - 如何使用 Hibernate 连接到 Oracle 12c PDB

java - JPA 设置引用的属性而不检索它。最佳实践

java.lang.ClassNotFoundException org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider

java - 将对象的 ArrayList 拆分为大小相等的 block ,例如在 Java 中为 1 MB

ssl - UnboundId 使用来自 Websphere 的 SSL KeyStore

java - Primefaces 日历内联模式大小错误

java - 我可以单独使用 @GenericGenerator 而不使用 @GenerateValue 吗?

mysql - @Table 注释中的小写字母导致错误

java - JPA/Hibernate 注解不懂继承?

java - 如何仅执行 "Distinct Root"但不为 JPA 生成不同的结果 SQL?