Hibernate批处理意外行为

时间:2012-03-21 13:12:01

标签: hibernate batch-file

我有一个简单的示例实体A,它有一个id和一个版本字段。 Id生成策略设置为TABLE。属性hibernate.jdbc.batch_sizehibernate.jdbc.batch_versioned_data设置为20true

我正在尝试使用以下内容批量插入实体A:

for (int i = 0; i < 500; i++) {
            A a = new A();
            a.persist();
            if (i % 20 == 0) {
                em.flush();
                em.clear();
            }
        }

查看MySQL日志,这会产生500个单独的insert into a (version, id) values (0, X)语句,而我期待insert into a (version, id) values (0, 1), (0, 2),...(0, 20)重复25次。

hibernate.jdbc日志级别设置为调试显示:

  

org.hibernate.jdbc.AbstractBatcher - Executing batch size: 20
   org.hibernate.jdbc.AbstractBatcher - no batched statements to execute

使用Hibernate 3.6.8,MySQL 5.5。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题 - 似乎hibernate没有将单个insert语句组合成插入多行的语句。启用hibernate批处理后,如果 rewriteBatchedStatements JDBC驱动程序设置设置为 true ,MySQL将执行此操作。