Какая стратегия на самом деле выбрана для "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 пакет.

Другие вопросы по тегам