首页 > 解决方案 > 使用 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;
    }

标签: javahibernate

解决方案


默认情况下,该属性会hibernate.jdbc.batch_size影响deleteinsert语句,并且不会批处理update语句。

要启用update批处理,您需要将属性hibernate.jdbc.batch_versioned_data设置为true. 但是你应该小心这个属性,引用弗拉德的博客

如果您的 JDBC 驱动程序从 executeBatch() 返回正确的行数,请将此属性设置为 true。打开此选项通常是安全的。然后 Hibernate 将使用批处理 DML 来处理自动版本化的数据。默认为假。


推荐阅读