java - 使用 Hibernate 4 进行批处理
问题描述
我想用休眠进行批量更新。我已经集成了 Hibernate,并且我已将属性“hibernate.jdbc.batch_size”添加为 50。我的印象是添加此属性后将自动完成批量更新。但是,我没有看到任何这样的查询,因为我将 show_sql 属性设置为 true。当我用谷歌搜索时,我找到了如何使用循环以及刷新和清除来刷新批次的示例。但这对我来说没有意义,因为它必须在 Hibernate 中实现,而不是我需要实现的东西。我想知道如何使用 Hibernate 启用批处理以及如何验证。
编辑
public void updateTasksInBatch(List<ScheduleTask> tasks) {
for (ScheduleTask entity : tasks) {
save(entity);
}
}
该方法在服务层,在控制器中被调用。保存方法如下
public T save(T entity) throws EntityExistsException,
PersistenceException,
IllegalArgumentException,
TransactionRequiredException {
entityManager.persist(entity);
return entity;
}
解决方案
默认情况下,该属性会hibernate.jdbc.batch_size
影响delete
和insert
语句,并且不会批处理update
语句。
要启用update
批处理,您需要将属性hibernate.jdbc.batch_versioned_data
设置为true
. 但是你应该小心这个属性,引用弗拉德的博客:
如果您的 JDBC 驱动程序从 executeBatch() 返回正确的行数,请将此属性设置为 true。打开此选项通常是安全的。然后 Hibernate 将使用批处理 DML 来处理自动版本化的数据。默认为假。