在hibernate中,id
元素的<generator>
子元素用于生成持久化类的对象的唯一标识符。 hibernate框架中定义了许多生成器类。
所有的生成器类都实现了org.hibernate.id.identifiergenerator
接口。 应用程序员可以通过实现identifiergenerator
接口来创建自己的生成器类。 hibernate框架提供了许多内置的生成器类:
如果没有使用<generator>
元素,assigned
是默认的生成器策略。在这种情况下,应用程序为对象分配id
。 例如:
....
<hibernate-mapping>
<class ...>
<id ...>
<generator class="assigned"></generator>
</id>
.....
</class>
</hibernate-mapping>
当没有其他进程将数据插入此表时,才会生成唯一的id
。 它生成short
,int
或long
型标识符。 第一个生成的标识符通常为1
,然后每次递增为1
。语法:
....
<hibernate-mapping>
<class ...>
<id ...>
<generator class="increment"></generator>
</id>
.....
</class>
</hibernate-mapping>
它使用数据库的顺序序列。如果没有定义序列,它会自动创建一个序列。 在oracle数据库的情况下,它将创建一个名为hibernate_sequence
的序列。 在oracle,db2,sap db,postgre sql或mckoi的情况下,它使用序列(sequence),但在interbase
中使用生成器。
语法:
.....
<id ...>
<generator class="sequence"></generator>
</id>
.....
要定义自己的序列,请使用generator
的 param
子元素。
.....
<id ...>
<generator class="sequence">
<param name="sequence">your_sequence_name</param>
</generator>
</id>
.....
它使用高低算法来生成short
,int
和long
类型的id
。 语法:
.....
<id ...>
<generator class="hilo"></generator>
</id>
.....
它使用标识,序列或希洛取决于数据库供应商。 语法:
.....
<id ...>
<generator class="native"></generator>
</id>
.....
它用于sybase,mysql,ms sql server,db2和hypersonic sql以支持id
列。 返回的id
类型为short
,int
或long
。
它在指定的序列名称上使用高低算法。 返回的id
类型为short
,int
或long
。
它使用128
位uuid
算法生成id
。 返回的id
是string
类型,在网络中是唯一的(因为使用了ip)。 uuid
以十六进制数字表示,长度为32
。
它使用由字符串类型的数据库生成的guid
。 它适用于ms sql server和mysql。
它使用数据库触发器返回主键。
它使用另一个关联对象的id
,主要用于<一对一>关联。
它使用特殊的序列生成策略。 仅在oracle 10g驱动程序中支持。