技术堆栈:Oracle数据库,Java 1.6,Hibernate 3.6.6。最终版。11.2.0.2, Java 1.6, Hibernate 3.6.6.Final.
我是第一次使用休眠,如果这是微不足道的,请道歉。
下面的代码应该进行一些优化:
Transaction tx = session.beginTransaction();
for (int i = 0; i < 10; i++) {
POJO pojo = new POJO(i);
session.save(pojo);
}
tx.commit();
hibernate.cfg.xml
具有以下条目
<property name="jdbc.batch_size">500</property>
如果hib真的批处理了所有的插入,我该如何验证呢?如果它执行了10次插入,那么就没有任何收益了。一个想法是把jdbc普通查询放在save()
之后,检查记录是否被添加到db中:
String query = "retrieve previously added element"
PreparedStatement stmt = session.connection().prepareStatement(query.toString());
Result rs = statement.executeQuery();
/** check contents of rs */
在我的例子中,它返回一个非空的集合,其中包含先前添加的元素。它有什么意义吗?我还可以如何检查批处理是否有效。
先谢了
3条答案
按热度按时间sqougxex1#
您需要将“BatchingBatch”记录器添加到您的日志记录提供程序中。
那么您将能够在日志中看到类似这样的内容:
除非看到此消息,否则批处理将不起作用。
使用Hibernate版本进行测试:5.2.12
4szc88ey2#
要检查实际刷新到数据库的内容,请按如下所示配置日志记录属性:
并将其添加到hibernate.cfg.xml中
然后您可以看到实际发送到数据库的内容。
对于批处理,您应该有如下输出:
此外,这里有一个很好的职位,有一些关于如何最有效地利用批处理的技巧:article
例如,您可以考虑在每次${jdbc.batch_size}保存后刷新。
k10s72fa3#
在 Boot 中,我添加了下面的行,以查看批处理是否正常工作
结果,我在日志中看到了这样的行