Массовое обновление в режиме гибернации с пакетной обработкой
У меня есть код, который обновляет группу или записи таблицы, используя функцию массового обновления hibernate (обновление таблицы set=:arg, где id =:id ...), в цикле for. Таким образом, если требуется обновить 100 записей, то обновление происходит 100 раз из режима гибернации. Есть ли способ упаковать эти множественные обновления в одно пакетное обновление (читай пакет jdbc) (или хотя бы уменьшить количество запущенных обновлений)? Я понимаю, что hibernate неявно выполняет пакетирование, но в приведенном выше случае это, похоже, не происходит.
1 ответ
Hibernate пытается пакетировать операции DML во время сброса, поэтому заставьте пользователя установить следующие свойства:
<property name="hibernate.order_inserts" value="true"/>
<property name="hibernate.order_updates" value="true"/>
<property name="hibernate.jdbc.fetch_size" value="20"/>
<property name="hibernate.jdbc.batch_size" value="50"/>
Также учтите, что генератор IDENTITY отключит пакетную обработку JDBC.