hibernate mysql中的批量插入/更新

时间:2015-06-22 17:08:35

标签: mysql hibernate

我们正在使用容器管理的事务。应用服务器JBOSS AS7。我在hibernate配置文件中启用了以下属性

<property name="hibernate.connection.url">jdbc:mysql://localhost/test?rewriteBatchedStatements=true</property> 
<property name="hibernate.jdbc.batch_size" value="20"/> 
<property name="hibernate.order_inserts" value="true"/> 
<property name="hibernate.order_updates" value="true"/> 
<property name="hibernate.jdbc.batch_versioned_data" value="true"/>

启用日志记录属性,如下所示

<logger category="org.hibernate.SQL">
    <level name="TRACE"/>
</logger>

我正在向数据库插入10条记录。 在hibernate.log中,我可以看到10个插入语句,如下所示

org.hibernate.sql insert into test (name,value,date) values (?,?,?) org.hibernate.sql insert into test (name,value,date) values (?,?,?)  

批量插入不起作用

1 个答案:

答案 0 :(得分:2)

很可能你实际上是在使用批处理;只是Hibernate为每个实体实例打印单独的sql。

要检查这一点,请为org.hibernate包启用DEBUG日志级别(如果要查看绑定变量,则为org.hibernate.type启用TRACE级别),然后检查日志中是否显示以下短语:

  • 重复使用批处理语句

  • 执行批量大小

如果为执行的批量大小打印了大于1的数字,那么您正在使用批处理。

特定于MySQL,为确保MySQL驱动程序重写插入语句,请按照here所述在连接URL中启用profileSQL参数。

注意:如果使用了IDENTITY id生成器,则JDBC批处理为disabled