java - Hibernate - 如何验证是否真的执行了批量插入

标签 java oracle hibernate orm batch-insert

技术栈:Oracle 数据库 11.2.0.2、Java 1.6、Hibernate 3.6.6.Final。

我是 hibernate 的新手,如果这是微不足道的,请道歉。

下面的代码应该进行一些优化:

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>

我如何验证 hibernate 是否真的批处理所有这些插入?如果它执行 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 */

在我的例子中,它返回一个包含先前添加的元素的非空集。这意味着什么吗?我还能如何检查批处理是否有效。

提前致谢

最佳答案

您需要将“BatchingBatch”记录器添加到您的日志提供程序。

org.hibernate.engine.jdbc.batch.internal.BatchingBatch

你将能够在日志中看到如下内容:

2018-02-20 17:33:41.279 DEBUG 6280 --- [           main] o.h.e.jdbc.batch.internal.BatchingBatch  : Executing batch size: 19

除非您看到此消息,否则批处理不起作用。

使用 Hibernate 版本测试:5.2.12

关于java - Hibernate - 如何验证是否真的执行了批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42002249/

相关文章:

java - 在java中循环语句以获得不同的结果

java - 基于集合的泛型和反射

sql - 使用 sum() 将所有具有时间类型的值相加

java - DBMS_RANDOM 似乎不起作用

java - Spring 集成 DAO 最佳实践

hibernate - 如何使用 hibernate 条件仅返回对象的一个​​元素而不是整个对象?

java - JPype 将参数传递给 Java

Java异常处理和循环继续

java - JPA 查询 - JOIN 子句

java - Hibernate,一个具有不同列数的用户类型