Позволить Oracle вызвать последовательность для идентификатора вместо Hibernate? - PullRequest
1 голос
/ 22 февраля 2012

У меня есть приложение, в котором есть база данных Oracle, где в каждой таблице есть триггер, который вызывает последовательность, чтобы получить следующий идентификатор для этой строки.Как настроить мои домены так, чтобы Hibernate не определял следующий идентификатор для вставки, а просто позволял Oracle и триггеру обрабатывать его?

Ранее у меня были настроены домены, чтобы использовать генератор последовательности, и это казалосьРабота.Я не могу использовать это в наших производственных системах, потому что администраторы БД не позволят мне предоставить привилегии выбора последовательности для Grails.Это явно ломает генератор для Hibernate.

Ответы [ 2 ]

5 голосов
/ 23 февраля 2012

В этом разделе форума Hibernate обсуждается пользовательский генератор, использующий generatedKeys из вставки JDBC для извлечения id: https://forum.hibernate.org/viewtopic.php?t=973262

Если этот пользовательский генератор работает для вас, вы можете использовать его через:

static mapping = {
    id generator:"jpl.hibernate.util.TriggerAssignedIdentityGenerator"
}
0 голосов
/ 23 февраля 2012

Вы не можете, есть следующие сценарии при использовании поддержки последовательностей базы данных и поддержки автономных номеров базы данных:

  1. Поддержка последовательности

    1. Hibernate извлекает следующее значение последовательности
    2. Hibernate устанавливает извлеченное значение в качестве идентификатора вашей сущности
    3. Hibernate сохраняет сущность, ее идентификатор устанавливается в запросе
  2. Поддержка авто-номеров

    1. Hibernate сохраняет сущность без значения идентификатора
    2. Hibernate извлекает назначенный идентификатор из драйвера JDBC

Фактически драйвер Oracle не поддерживает шаг 2.2, поэтому Hibernate не может получить последний назначенный идентификатор (поэтому он может установить его в идентификаторе вашей сущности).

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