Все генераторы реализуют интерфейс org.hibernate.id.IdentifierGenerator. Это очень простой интерфейс. Некоторые приложения могут выбирать свои собственные специализированные реализации, однако Hibernate предоставляет ряд встроенных реализаций. Названия ярлыков для встроенных генераторов следующие:
приращение
генерирует идентификаторы типа long, short или int, которые являются уникальными только тогда, когда другой процесс не вставляет данные в одну и ту же таблицу. Не используйте в кластере.
идентичность
поддерживает столбцы идентификации в DB2, MySQL, MS SQL Server, Sybase и HypersonicSQL. Возвращаемый идентификатор имеет тип long, short или int.
последовательность
использует последовательность в DB2, PostgreSQL, Oracle, SAP DB, McKoi или генераторе в Interbase. Возвращаемый идентификатор имеет тип long, short или int
Хило
использует алгоритм hi/lo для эффективного генерации идентификаторов типа long, short или int, учитывая таблицу и столбец (по умолчанию hibernate_unique_key и next_hi соответственно) в качестве источника значений hi. Алгоритм hi/lo генерирует идентификаторы, которые уникальны только для конкретной базы данных.
seqhilo
использует алгоритм hi/lo для эффективного генерации идентификаторов типа long, short или int с заданной именованной последовательностью базы данных.
UUID
использует 128-битный алгоритм UUID для генерации идентификаторов строки типа, которые уникальны в сети (используется IP-адрес). UUID кодируется как строка из 32 шестнадцатеричных цифр в длину.
справ
использует строку GUID, сгенерированную базой данных, на MS SQL Server и MySQL.
родной
выбирает идентификатор, последовательность или hilo в зависимости от возможностей базовой базы данных.
присвоен
позволяет приложению назначать идентификатор объекту перед вызовом save(). Это стратегия по умолчанию, если ни один элемент не указан.
выберите
извлекает первичный ключ, назначенный триггером базы данных, путем выбора строки с помощью некоторого уникального ключа и получения значения первичного ключа.
иностранный
использует идентификатор другого связанного объекта. Он обычно используется в сочетании с ассоциацией первичных ключей.
последовательность-идентичность
специализированная стратегия генерации последовательности, которая использует последовательность базы данных для генерации фактического значения, но объединяет ее с JDBC3 getGeneratedKeys, чтобы возвращать сгенерированное значение идентификатора как часть выполнения инструкции insert. Эта стратегия поддерживается только для драйверов Oracle 10g, ориентированных на JDK 1.4. Комментарии к этим операторам вставки отключены из-за ошибки в драйверах Oracle.
Если вы создаете простое приложение с небольшим количеством одновременных пользователей, вы можете перейти на инкремент, идентификатор, hilo и т.д. Они просты в настройке и не нуждаются в большой кодировке внутри db.
Обновление:
Недавно у нас возникла проблема с idendity, где примитивный тип (int) был исправлен с использованием типа warapper (Integer).