我有一个简单的示例实体A,它有一个id和一个版本字段。 Id生成策略设置为TABLE。属性hibernate.jdbc.batch_size
和hibernate.jdbc.batch_versioned_data
设置为20
和true
。
我正在尝试使用以下内容批量插入实体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。
我在这里缺少什么?
答案 0 :(得分:0)
回答我自己的问题 - 似乎hibernate没有将单个insert语句组合成插入多行的语句。启用hibernate批处理后,如果 rewriteBatchedStatements JDBC驱动程序设置设置为 true ,MySQL将执行此操作。