如何使用实体管理器和标准在休眠中创建批量更新?

How to create batch update in hibernate with entity manager and criteria?

我只是尝试在 bd 中创建批量更新,但遇到了问题。 我读了很多文章,所有文章都手动管理会话,我不想这样做。我如何为我的实体创建批量更新我编写了以下代码:

@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

现在,您没有提及列表 "objects" 是否包含休眠管理或分离的对象。如果这些不是分离的实例,则不需要合并,因为 hibernate 已经知道实体发生的更改。

最后,您只需要使用 getEntityManager().flush() 刷新会话; 这应该刷新对数据库的所有更改,并且休眠应该执行它的批处理魔法。

这篇关于批处理的指南应该会有帮助:https://vladmihalcea.com/how-to-batch-insert-and-update-statements-with-hibernate/