5

Hibernate 文档( 5.1.2.2 . Identifier generator)状态

AUTO:根据底层数据库的能力选择 IDENTITY、SEQUENCE 或 TABLE。

但是我无法找到文档/概述在将特定数据库定义为 GenerationType.AUTO 时使用了哪些 @GeneratedValue 策略。

有人知道是否有人维护主要数据库(例如 Oracle、DB2、PostgreSQL、MySQL、MSSQL ......)的实际生成策略列表吗?在哪里可以找到它?

4

1 回答 1

5

此链接是关于 Java Persistence API 的,并且似乎定期更新。 http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing

身份排序

身份排序使用数据库中的特殊 IDENTITY 列来允许数据库在插入行时自动为对象分配一个 ID。许多数据库都支持标识列,例如MySQL、DB2、SQL Server、Sybase 和 PostgreSQL。Oracle 不支持 IDENTITY 列,但可以使用序列对象和触发器来模拟它们。

序列对象

序列对象使用特殊的数据库对象来生成 id。序列对象仅在某些数据库中受支持,例如Oracle、DB2 和 Postgres。通常,SEQUENCE 对象具有名称、INCREMENT 和其他数据库对象设置。每次选择 .NEXTVAL 时,序列都会增加 INCREMENT。

编辑

如果 DB2 等数据库同时支持 IDENTITY 列并且 Sequences hibernate 选择 Identity 列,请参阅Dialect

public Class getNativeIdentifierGeneratorClass() {
    if ( supportsIdentityColumns() ) {
        return IdentityGenerator.class;
    }
    else if ( supportsSequences() ) {
        return SequenceGenerator.class;
    }
    else {
        return TableHiLoGenerator.class;
    }
}

您可以通过查看org.hibernate.dialect包中的相关方言来检查每个数据库的 supportsIdentityColumns() 和 supportsSequences() 返回的内容。

于 2013-11-09T12:50:38.317 回答