Как создать пакетное обновление в спящем режиме с помощью диспетчера сущностей и критериев? - PullRequest
0 голосов
/ 26 июня 2018

Все, что я пытался создать пакетное обновление в bd, но столкнулся с проблемой.Я прочитал много статей, и все они управляют сессией вручную, я не хочу этого делать.Как я могу создать пакетное обновление для своих сущностей, я пишу следующий код:

@Transactional(propagation = Propagation.REQUIRED)
public void update(List<MyClass> objects) {
    for (MyClass o: objects) {
        getEntityManager().merge(o);
    }
}

Кроме того, я добавил следующие свойства hibernate.jdbc.batch_size = 32

Где моя ошибка?

1 Ответ

0 голосов
/ 26 июня 2018

Сначала, если «MyClass» является версионной сущностью, вам необходимо включить следующее свойство:

hibernate.jdbc.batch_versioned_data=true

Теперь вы не упомянули, содержит ли список «объекты» управляемые или отключенные объекты гибернации. Если это не отдельные экземпляры, то объединение не требуется, поскольку hibernate уже знает об изменениях, произошедших с объектами.

Наконец, вам просто нужно очистить сессию, используя getEntityManager (). Flush (); Это должно сбрасывать все изменения в базу данных, и hibernate должен делать свою магию пакетирования.

Это руководство по дозированию должно быть полезным: https://vladmihalcea.com/how-to-batch-insert-and-update-statements-with-hibernate/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...