如何为Oracle 11g和Hibernate优化批处理INSERT?

时间:2015-12-21 22:27:19

标签: java oracle hibernate oracle11g hibernate3

我有一个应用程序可以执行相当多的批量插入。我想优化应用程序以尽快完成这些工作。

我认为我认为有几个Hibernate设置与批量插入有关:

  • hibernate.jdbc.batch_size
  • hibernate.jdbc.batch_versioned_data
  • hibernate.jdbc.use_get_generated_keys

我不确定是否需要设置这些属性。如果我确实需要设置它们,我不确定正确的值是什么。

为我的Oracle版本设置hibernate.jdbc.batch_versioned_datahibernate.jdbc.use_get_generated_keystrue是否安全?

如何选择批量?

我正在使用这些库的以下版本:

  • Hibernate: 3.2.3 GA
  • Oracle数据库: 11G
  • Oracle数据库驱动程序: 11.2.0.3.0
  • c3p0: 0.9.1.2

1 个答案:

答案 0 :(得分:1)

hibernate.jdbc.batch_size 应将其设置为符合您要求的合理值(建议介于5到30之间)。

hibernate.jdbc.batch_versioned_data 对于您的数据库和JDBC驱动程序版本,这是安全(有关详细信息,请参阅this question)。 启用此功能。否则,对于版本化实体,将默默地破坏乐观锁定机制。

hibernate.jdbc.use_get_generated_keys 一些Hibernate id生成器使用它,它在插入后检索本机生成的键(当自动增量列和类似用于主键生成时)。如果使用这样的id生成器,无论是否使用批处理,都必须启用它。

另外,请务必启用hibernate.order_inserts。有关此标志和Hibernate批处理的更多详细信息,请参见here