<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。例如:

<hibernate-mapping> 
  <class ...> 
   <id ...> 
    <generator class="assigned"></generator> 
   </id> 
  ..... 
  </class> 
</hibernate-mapping>

2) increment

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

<hibernate-mapping> 
  <class ...> 
   <id ...> 
    <generator class="increment"></generator> 
   </id> 
  ..... 
  </class> 
</hibernate-mapping>

3) sequence

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

<id ...> 
  <generator class="sequence"></generator> 
</id> 

要定义自己的序列,请使用generator的param子元素。

<id ...> 
  <generator class="sequence"> 
    <param name="sequence">your_sequence_name</param> 
  </generator> 
</id> 

4) hilo

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

<id ...> 
  <generator class="hilo"></generator> 
</id> 

5) native

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

<id ...> 
  <generator class="native"></generator> 
</id> 

6) identity

它用于支持Sybase、MySQL、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, Hibernate教程, Hibernate框架, Hibernate框架设计, Hibernate初级教程, Hibernate框架用法, Hibernate指南, Hibernate入门, Hibernate中级教程, Hibernate进阶教程, Hibernate高级教程, Hibernate下载