2012-03-21 2 views
0

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

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

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.

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

ответ

0

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

Смежные вопросы