虽然这里还有其他类似的问题,但我没有看到任何解决所有问题或有明确答案的问题。基本上我正在使用Hibernate支持的JPA在J2EE应用程序中构建数据访问和服务层。
应用程序执行大型数据加载/更新操作,我想确保它们尽可能高效地进入数据库。正确的答案将使用代码解释如何使用大量数据进行插入,更新和理想合并
注意我已经问了一些关于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?
答案 0 :(得分:3)
我可以在使用身份生成器时解释有关Hibernate禁用批量插入的声明。
为了让Hibernate使用标识生成器获取新实体的标识符,它必须实际执行对数据库的插入,然后执行select以获取该标识符值,因为该值是由Insert上的数据库分配的。这与使用序列发生器形成对比。在这种情况下,Hibernate可以预先获得尽可能多的标识符(如果需要,可以批量生成),并在插入之前将它们分配给它所插入的实体。
所以差异是插入然后选择标识生成器与选择然后插入序列。
因此,当使用身份生成器时,Hibernate必须逐个执行Inserts,但是在使用序列生成器时可以将它们批处理。