所有生成器都实现接口 org.hibernate.id.IdentifierGenerator。这是一个非常简单的界面。一些应用程序可以选择提供自己的专用实现,然而,Hibernate 提供了一系列内置的实现。内置生成器的快捷键名称如下:
增量
生成 long、short 或 int 类型的标识符,这些标识符仅在没有其他进程将数据插入同一个表时才是唯一的。不要在集群中使用。
身份
支持 DB2、MySQL、MS SQL Server、Sybase 和 HypersonicSQL 中的标识列。返回的标识符是 long、short 或 int 类型。
序列
使用 DB2、PostgreSQL、Oracle、SAP DB、McKoi 中的序列或 Interbase 中的生成器。返回的标识符是 long、short 或 int 类型的
希洛
使用 hi/lo 算法有效地生成 long、short 或 int 类型的标识符,给定一个表和列(默认情况下分别为 hibernate_unique_key 和 next_hi)作为 hi 值的来源。 hi/lo 算法生成仅对特定数据库唯一的标识符。
seqhilo
在给定数据库序列的情况下,使用 hi/lo 算法有效地生成 long、short 或 int 类型的标识符。
uuid
使用 128 位 UUID 算法生成字符串类型的标识符,这些标识符在网络中是唯一的(使用 IP 地址)。 UUID 被编码为长度为 32 位十六进制数字的字符串。
guid
在 MS SQL Server 和 MySQL 上使用数据库生成的 GUID 字符串。
原生
根据底层数据库的功能选择身份、序列或 hilo。
已分配
让应用程序在调用 save() 之前为对象分配一个标识符。如果未指定任何元素,这是默认策略。
选择
通过按某个唯一键选择行并检索主键值来检索由数据库触发器分配的主键。
外国
使用另一个关联对象的标识符。它通常与主键关联一起使用。
序列身份
一种专门的序列生成策略,它利用数据库序列来生成实际值,但将其与 JDBC3 getGeneratedKeys 结合以返回生成的标识符值作为插入语句执行的一部分。此策略仅在面向 JDK 1.4 的 Oracle 10g 驱动程序上受支持。由于 Oracle 驱动程序中的错误,对这些插入语句的注释被禁用。