Hibernate 中的生成器类

2025 年 3 月 18 日 | 3 分钟阅读

<generator> 类是 id 的子元素。它用于为持久化类的对象生成唯一的标识符。Hibernate 框架中定义了许多生成器类。

 

所有生成器类都实现了 org.hibernate.id.IdentifierGenerator 接口。应用程序员可以通过实现 IdentifierGenerator 接口来创建自己的生成器类。Hibernate 框架提供了许多内置的生成器类

  1. assigned (已分配)
  2. increment (递增)
  3. sequence (序列)
  4. hilo (高低位)
  5. native
  6. identity (标识)
  7. seqhilo (序列高低位)
  8. uuid (通用唯一识别码)
  9. guid (全局唯一标识符)
  10. select (选择)
  11. foreign (外键)
  12. sequence-identity (序列标识)

1) assigned (已分配)

如果没有 <generator> 元素,这是默认的生成器策略。在这种情况下,应用程序分配 id。 例如


2) increment (递增)

仅当没有其他进程将数据插入到此表中时,它才会生成唯一的 id。它生成 shortintlong 类型标识符。如果表包含一个标识符,则应用程序会考虑其最大值,否则应用程序会认为第一个生成的标识符是 1。对于每个属性值,hibernate 将标识符递增 1。语法


3) sequence (序列)

它使用数据库的序列。 如果没有定义序列,它会自动创建一个序列,例如,在 Oracle 数据库中,它会创建一个名为 HIBERNATE_SEQUENCE 的序列。 在 Oracle、DB2、SAP DB、Postgre SQL 或 McKoi 中,它使用序列,但在 Interbase 中它使用生成器。 语法

要定义您自己的序列,请使用生成器的 param 子元素。


4) hilo (高低位)

它使用高低位算法来生成 short、int 和 long 类型的 id。 语法


5) native (本地)

它根据数据库供应商使用 identity、sequence 或 hilo。 语法


6) identity (标识)

它用于 Sybase、My SQL、MS SQL Server、DB2 和 HypersonicSQL,以支持 id 列。 返回的 id 类型为 short、int 或 long。 由数据库负责生成唯一的标识符。


7) seqhilo (序列高低位)

它在指定的序列名称上使用高低位算法。 返回的 id 类型为 short、int 或 long。


8) uuid (通用唯一识别码)

它使用 128 位 UUID 算法来生成 id。 返回的 id 类型为 String,在网络中是唯一的(因为使用了 IP)。 UUID 以十六进制数字表示,长度为 32。


9) guid (全局唯一标识符)

它使用由数据库生成的 GUID,类型为字符串。 它适用于 MS SQL Server 和 MySQL。

10) select (选择)

它使用由数据库触发器返回的主键。

11) foreign (外键)

它使用另一个关联对象的 id,主要与 <one-to-one> 关联一起使用。

12) sequence-identity (序列标识)

它使用一种特殊的序列生成策略。 它仅在 Oracle 10g 驱动程序中受支持。
下一个主题Hibernate 中的方言