2014-11-06 78 views
1

我们有大约100,000条记录被插入到数据库中。在Hibernate批量插入中这样做会是一个好主意吗?应该选择批量大小的政策是什么?Hibernate批量更新与存储过程

否则我们应该调用一个存储过程来批量插入?无法获得有关从Hibernate传递数组对象到数据库存储过程的任何信息。

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

感谢

回答

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批处理支持不够,您应该试试本地存储过程。

您选择的任何方法都需要注意长时间运行的事务。长时间运行的事务持有锁,并且撤销/重做数据库日志可能会增长并使事务更慢。