在Hibernate的单证(5.1.2.2。标识符生成器)状态
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。
身份排序使用数据库中的特殊IDENTITY列来允许数据库在插入对象的行时自动为其分配ID。许多数据库(例如 MySQL,DB2,SQL Server,Sybase和PostgreSQL) 都支持标识列。Oracle不支持IDENTITY列,但可以使用序列对象和触发器来模拟它们。
序列对象使用特殊的数据库对象来生成ID。仅某些数据库(例如 Oracle,DB2和Postgres) 支持序列对象。通常,SEQUENCE对象具有名称,INCREMENT和其他数据库对象设置。每次选择.NEXTVAL时,序列都会增加INCREMENT。
编辑
如果诸如DB2之类的数据库同时支持IDENTITY列,并且“hibernate”序列选择“身份”列,请参见Dialect:
public Class getNativeIdentifierGeneratorClass() { if ( supportsIdentityColumns() ) { return IdentityGenerator.class; } else if ( supportsSequences() ) { return SequenceGenerator.class; } else { return TableHiLoGenerator.class; } }
您可以通过查看org.hibernate.dialect包中的相关方言来检查每个数据库的supportsIdentityColumns()和supportsSequences()返回的内容。
org.hibernate.dialect