Hibernate 文档( 5.1.2.2 . Identifier generator)状态
AUTO:根据底层数据库的能力选择 IDENTITY、SEQUENCE 或 TABLE。
但是我无法找到文档/概述在将特定数据库定义为 GenerationType.AUTO 时使用了哪些 @GeneratedValue 策略。
有人知道是否有人维护主要数据库(例如 Oracle、DB2、PostgreSQL、MySQL、MSSQL ......)的实际生成策略列表吗?在哪里可以找到它?
Hibernate 文档( 5.1.2.2 . Identifier generator)状态
AUTO:根据底层数据库的能力选择 IDENTITY、SEQUENCE 或 TABLE。
但是我无法找到文档/概述在将特定数据库定义为 GenerationType.AUTO 时使用了哪些 @GeneratedValue 策略。
有人知道是否有人维护主要数据库(例如 Oracle、DB2、PostgreSQL、MySQL、MSSQL ......)的实际生成策略列表吗?在哪里可以找到它?
此链接是关于 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() 返回的内容。