Подтвердить что ты не робот

Hibernate отключает вставку при использовании генератора идентификационных идентификаторов

В документации Hibernate говорится:

Спящий режим отключает пакетную загрузку на уровне JDBC прозрачно, если вы используете генератор идентификационных идентификаторов.

Но все мои объекты имеют такую ​​конфигурацию:

@Id
@GeneratedValue(strategy = javax.persistence.GenerationType.IDENTITY)
private Integer id;

Когда я использую это имя выше So

  • какая проблема с IDENTITY?
  • отключена ли вставка пакета?
  • Как я могу это решить?
4b9b3361

Ответ 1

  • Спящий режим пытается отложить Контекст сохранения, просачиваясь до последнего момента. Эта стратегия традиционно известна как транзакционная запись.

    Записывающий файл больше связан с промывкой Hibernate, а не с любой логической или физической транзакцией. Во время транзакции флеш может появляться несколько раз.

    Сброшенные изменения видны только для текущей транзакции базы данных. Пока текущая транзакция не будет совершена, никакие изменения не будут видны другими параллельными транзакциями.

  • Генератор IDENTITY позволяет автоматически увеличивать числовой/целочисленный столбец по требованию. Процесс приращения происходит за пределами текущей текущей транзакции, поэтому откат может закончиться отбрасыванием уже назначенных значений (могут возникнуть пробелы в значениях).

    Процесс приращения очень эффективен, так как он использует внутренний механизм блокировки базы данных в отличие от более тяжелых транзакционных курсовых зерновых замков.

    Единственным недостатком является то, что мы не можем знать новое значение перед выполнением инструкции INSERT. Это ограничение препятствует "стратегии по списанию", принятой Hibernate. По этой причине Hibernates отключает пакетную поддержку JDBC для объектов, использующих генератор IDENTITY.

  • Единственное решение - использовать генератор идентификаторов TABLE, поддерживаемый пул-оптимизатором. Этот генератор также работает с MySQL, поэтому он преодолевает отсутствие поддержки SEQUENCE базы данных. Однако генератор TABLE работает хуже, чем IDENTITY, поэтому в конце концов это не является жизнеспособной альтернативой. Поэтому использование IDENTITY по-прежнему является лучшим выбором для MySQL, и если вам нужна пакетная обработка для вставки, вы можете использовать jOOQ для этого. Hibernate и jOOQ - отличная комбо.