Автоинкремент с Grails / Hibernate для разных БД - PullRequest
2 голосов
/ 19 августа 2011

это не настоящая проблема, но меня удивляет:

когда я использую Grails с разными БД, я получаю разные приращения счетчика ...:

  • с помощью ootb hsqldb каждая таблица получает свой собственный счетчик, который всегда увеличивается на 1
  • с оракулом, кажется, что все таблицы используют один и тот же глобальный счетчик
  • Теперь я использую javadb / derby, и сгенерированный идентификатор огромен!

где я могу найти больше информации об этом поведении и какое из них лучше?

  • hsql, кажется, уменьшает счетчики
  • с оракулом, я получаю глобальный уникальный идентификатор - также хорошая функция
  • а как же поведение дерби?

1 Ответ

3 голосов
/ 20 августа 2011

Это действительно зависит от принятой по умолчанию стратегии генерации идентификатора на конкретном диалекте. Grails позволяет настроить стратегию генерации с помощью mapping closure .

Наиболее «безопасной» (т.е. поддерживаемой каждой СУБД) стратегией генерации является TABLE, и это предпочтительный выбор многих реализаций JPA. Это, вероятно, то, что вы получаете в HSQLDB. Однако последовательности поддержки Oracle и эти объекты, как правило, лучше оптимизированы для обработки генерации ключей - следовательно, диалект для Oracle, похоже, использует одну глобальную последовательность. Я не знаком с Derby, но, вероятно, там есть поддержка столбцов идентификаторов, и вы получите что-то вроде UUID.

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