Hibernate教程-Hibernate中的生成器类
<generator> 类是 id 的子元素。它用于为持久类的对象生成唯一标识符。Hibernate框架中定义了许多生成器类。
所有生成器类都实现了 org.hibernate.id.IdentifierGenerator 接口。应用程序员可以通过实现IdentifierGenerator接口来创建自己的生成器类。Hibernate框架提供了许多内置的生成器类:
- assigned
- increment
- sequence
- hilo
- native
- identity
- seqhilo
- uuid
- guid
- select
- foreign
- sequence-identity
1) assigned
如果没有 <generator> 元素,则它是默认的生成器策略。在这种情况下,应用程序分配id。例如:
<hibernate-mapping>
<class ...>
<id ...>
<generator class="assigned"></generator>
</id>
.....
</class>
</hibernate-mapping>
2) increment
仅当没有其他进程插入数据到该表时才生成唯一id。它生成 short、int 或 long 类型的标识符。如果表包含标识符,则应用程序会考虑其最大值,否则应用程序会将第一个生成的标识符视为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驱动程序中支持。