我有一个应用程序可以执行相当多的批量插入。我想优化应用程序以尽快完成这些工作。
我认为我认为有几个Hibernate设置与批量插入有关:
hibernate.jdbc.batch_size
hibernate.jdbc.batch_versioned_data
hibernate.jdbc.use_get_generated_keys
我不确定是否需要设置这些属性。如果我确实需要设置它们,我不确定正确的值是什么。
为我的Oracle版本设置hibernate.jdbc.batch_versioned_data
和hibernate.jdbc.use_get_generated_keys
到true
是否安全?
如何选择批量?
我正在使用这些库的以下版本:
答案 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。