我有一个可以执行大量批量插入的应用程序。我想优化应用程序以尽快完成这些任务。
我看到几个我认为与批量插入有关的 Hibernate 设置:
-
hibernate.jdbc.batch_size
-
hibernate.jdbc.batch_versioned_data
-
hibernate.jdbc.use_get_generated_keys
我不确定是否需要设置这些属性。如果我确实需要设置它们,我不确定正确的值是什么。
设置 hibernate.jdbc.batch_versioned_data
安全吗?和hibernate.jdbc.use_get_generated_keys
至true
对于我的 Oracle 版本?
如何选择批量大小?
我正在使用这些库的以下版本:
- hibernate :3.2.3 GA
- Oracle 数据库:11G
- Oracle 数据库驱动程序:11.2.0.3.0
- c3p0:0.9.1.2
最佳答案
hibernate.jdbc.batch_size
应将其设置为适合您要求的合理值(建议介于 5 到 30 之间)。
hibernate.jdbc.batch_versioned_data
这对于您的数据库和 JDBC 驱动程序版本不安全(有关更多详细信息,请参阅 this question)。请勿不要打开此功能。否则,版本化实体的乐观锁定机制将被悄悄破坏。
hibernate.jdbc.use_get_ generated_keys
这是由一些 Hibernate id 生成器使用的,这些生成器在插入后检索 native 生成的键(当自动增量列和类似列用于主键时)一代)。如果您使用此类 id 生成器,无论是否使用批处理,都必须启用它。
此外,请确保启用 hibernate.order_inserts
。有关此标志和 Hibernate 批处理的更多详细信息,请参阅 here .
关于java - 如何优化 Oracle 11g 和 Hibernate 的批量 INSERT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34405404/