java - 如何使用实体管理器和条件在 hibernate 中创建批量更新?

标签 java hibernate jdbc batch-processing criteria

我尝试的只是在 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/

相关文章:

java - java中如何设计JPA多态关系?

java - 我需要一种仅使用 java 中的 SWT 自动单击程序中按钮的方法

java实时优先级高于应有的优先级

sql - 如何计算 hibernate 在一个 Grails 请求中执行了多少个 SQL 查询?

java - JPA:选择实体的子集不会加载@OneToOne 属性

java - 如何中止 JDBC Postgresql CopyManager 复制?

java - 是每个数据库引擎 (jdbc) 的 Sql 语法

java - 动态显示结果集

java - 用正则表达式按索引将一个字符替换为其他字符?

java - Spring Boot 启用全局 CORS 支持问题 : only GET is working, POST、PUT 和 Delete 不起作用