Какая стратегия на самом деле выбрана для "GenerationType.AUTO" для основных баз данных?
Документация Hibernate (5.1.2.2. Генератор идентификаторов)
AUTO: выбирает IDENTITY, SEQUENCE или TABLE в зависимости от возможностей базовой базы данных.
Но я не могу найти документацию / обзор того, что стратегия @GeneratedValue используется для конкретных баз данных при определении их как GenerationType.AUTO.
Кто-нибудь знает, поддерживает ли кто-то список фактической стратегии генерации для основных баз данных (например, Oracle, DB2, PostgreSQL, MySQL, MSSQL, ...)? И где его найти?
1 ответ
Эта ссылка о Java Persistence API и, кажется, регулярно обновляется. http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing
Идентификация последовательности
При идентификации последовательности используются специальные столбцы IDENTITY в базе данных, чтобы база данных могла автоматически назначать идентификатор объекту при вставке его строки. Столбцы идентификации поддерживаются во многих базах данных, таких как MySQL, DB2, SQL Server, Sybase и PostgreSQL. Oracle не поддерживает столбцы IDENTITY, но их можно моделировать с использованием объектов последовательности и триггеров.
Объекты последовательности
Объекты последовательности используют специальные объекты базы данных для генерации идентификаторов. Объекты последовательности поддерживаются только в некоторых базах данных, таких как Oracle, DB2 и Postgres. Обычно объект SEQUENCE имеет имя, INCREMENT и другие параметры объекта базы данных. Каждый раз, когда выбирается.NEXTVAL, последовательность увеличивается на INCREMENT.
редактировать
Если база данных, такая как DB2, поддерживает как столбцы IDENTITY, так и гибернацию Sequence, выбирает столбцы Identity, см. Диалект:
public Class getNativeIdentifierGeneratorClass() {
if ( supportsIdentityColumns() ) {
return IdentityGenerator.class;
}
else if ( supportsSequences() ) {
return SequenceGenerator.class;
}
else {
return TableHiLoGenerator.class;
}
}
Вы можете проверить, что возвращено от SupportIdentityColumns() и SupportSeptions () для каждой базы данных, посмотрев на соответствующий диалект в org.hibernate.dialect
пакет.