Спящий режим дозирования неожиданного поведения - PullRequest
0 голосов
/ 21 марта 2012

У меня есть простой пример объекта A, который имеет идентификатор и поле версии.Стратегия генерации идентификатора установлена ​​на TABLE.Свойства hibernate.jdbc.batch_size и hibernate.jdbc.batch_versioned_data установлены на 20 и true.

Я пытаюсь выполнить пакетную вставку объекта A со следующим:

for (int i = 0; i < 500; i++) {
            A a = new A();
            a.persist();
            if (i % 20 == 0) {
                em.flush();
                em.clear();
            }
        }

Глядя на журналы MySQL, это приводит к 500 отдельным insert into a (version, id) values (0, X) операторам, тогда как я ожидал, что что-то вроде insert into a (version, id) values (0, 1), (0, 2),...(0, 20) будет повторяться 25 раз.

Установка hibernate.jdbc уровня журнала для отладки показывает:

org.hibernate.jdbc.AbstractBatcher - Executing batch size: 20
org.hibernate.jdbc.AbstractBatcher - no batched statements to execute

Использование Hibernate 3.6.8, MySQL 5.5.

Чего мне здесь не хватает?

1 Ответ

0 голосов
/ 22 марта 2012

Чтобы ответить на мой собственный вопрос - кажется, что hibernate не группирует одиночные операторы вставки в те, которые вставляют несколько строк. При включенном пакетном режиме гибернации MySQL сделает это, если для rewriteBatchedStatements для параметра драйвера JDBC установлено значение true .

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