Hibernate批量更新与存储过程

时间:2014-11-06 11:02:22

标签: java hibernate jpa stored-procedures batch-insert

我们有大约100,000条记录要插入到DB中。在Hibernate Batch插入中执行此操作会是个好主意吗?选择批量大小的政策应该是什么?

否则我们应该调用存储过程进行批量插入?无法获取有关将一组对象从Hibernate传递到DB存储过程的任何信息。

或者两者的混合搭配会加快这个过程。就像批量调用Stored Proc一样?

1 个答案:

答案 0 :(得分:2)

对于efficient batch inserts,请确保启用以下属性:

<property name="hibernate.order_updates" value="true"/>
<property name="hibernate.order_inserts" value="true"/>
<property name="hibernate.jdbc.batch_versioned_data" value="true"/>
<property name="hibernate.jdbc.batch_size" value="50"/>

另请确保don't use IDENTITY for your entity @Id column。 IDENTITY生成器禁用了批处理。

我建议您尝试使用enhanced generators,尤其是pooled-lo optimizer,以防您使用支持序列的数据库(Oracle,PostgreSQL,SQL Server 2008)。

您可以从Hibernate调用存储过程,但它对于选择数据比批量插入更有用。

如果建议的Hibernate批处理支持不够,您应该尝试本机存储过程。

您选择的任何方法都需要了解长时间运行的事务。长时间运行的事务会保留锁定,并且撤消/重做数据库日志可能会增长并使您的事务处理更慢。