【发布时间】:2015-06-29 14:12:51
【问题描述】:
浏览hibernatehttps://docs.jboss.org/hibernate/orm/3.3/reference/en/html/batch.html的批处理文档。我尝试了一个在休眠配置文件中设置批量大小属性(hibernate.jdbc.batch_size=20)的示例,然后像这样进行刷新和清除:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer);
if ( i % 20 == 0 ) { //20, same as the JDBC batch size
//flush a batch of inserts and release memory:
session.flush();
session.clear();
}
}
tx.commit();
session.close();
现在的问题是,如果我将 i 的值设置为 50,那么它会将记录刷新为 50 个批次。所以,如果我可以在循环中控制批次大小,为什么我需要设置 hibernate.jdbc.batch_size 20 属性。
谁能解释一下这两种方法的区别,即设置属性而不是显式调用flush。
【问题讨论】:
-
你的ID字段是在
CustomerIDENTITY还是手动设置的? -
我正在使用 GenerationType.TABLE 。因此为此维护了一个序列表。
-
检查答案stackoverflow.com/questions/8925940/…上的cmets
标签: java hibernate batch-processing