我尝试的只是在 bd 中创建批量更新,但遇到了问题。 我读了很多文章,所有文章都手动管理 session ,我不想这样做。如何为我的实体创建批量更新我编写以下代码:
@Transactional(propagation = Propagation.REQUIRED)
public void update(List<MyClass> objects) {
for (MyClass o: objects) {
getEntityManager().merge(o);
}
}
此外,我还添加了以下属性 hibernate.jdbc.batch_size=32
我的错误在哪里?
最佳答案
首先,如果“MyClass”是版本化实体,那么您需要启用以下属性:
hibernate.jdbc.batch_versioned_data=true
现在,您没有提及列表“对象”是否包含 hibernate 管理或分离的对象。如果这些不是分离的实例,则不需要合并,因为 hibernate 已经知道实体发生的更改。
最后,您只需要使用 getEntityManager().flush() 刷新 session 即可; 这应该刷新对数据库的所有更改,并且 hibernate 应该发挥其批处理魔力。
这个关于批处理的指南应该会有所帮助:https://vladmihalcea.com/how-to-batch-insert-and-update-statements-with-hibernate/
关于java - 如何使用实体管理器和条件在 hibernate 中创建批量更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51038659/