<generator>类是id的子元素。它用于为持久性类的对象生成唯一标识符。 Hibernate Framework中定义了许多生成器类。
所有生成器类都实现org.hibernate.id.IdentifierGenerator接口。应用程序程序员可以通过实现IdentifierGenerator接口来创建自己的生成器类。 Hibernate框架提供了许多内置的生成器类:
- 已分配
- 增量
- 顺序
- 螺纹
- 本机
- 身份
- 当然
- uid
- 吉德
- 选择
- 国外
- 序列同一性
1)分配
如果没有<generator>元素, 则它是默认的生成器策略。在这种情况下, 应用程序会分配ID。例如:
....
<hibernate-mapping>
<class ...>
<id ...>
<generator class="assigned"></generator>
</id>
.....
</class>
</hibernate-mapping>
2)增量
仅当没有其他进程向该表中插入数据时, 它才会生成唯一ID。它生成short, int或long类型标识符。如果一个表包含一个标识符, 则应用程序将考虑其最大值, 否则应用程序将考虑第一个生成的标识符为1。对于每个属性值, Hibernate模式将标识符增加1。语法:
....
<hibernate-mapping>
<class ...>
<id ...>
<generator class="increment"></generator>
</id>
.....
</class>
</hibernate-mapping>
3)顺序
它使用数据库的顺序。如果没有定义序列, 它将自动创建一个序列, 例如对于Oracle数据库, 它将创建一个名为HIBERNATE_SEQUENCE的序列。对于Oracle, DB2, SAP DB, Postgre SQL或McKoi, 它使用序列, 但在内部数据库中使用生成器。句法:
.....
<id ...>
<generator class="sequence"></generator>
</id>
.....
要定义自己的序列, 请使用generator的param子元素。
.....
<id ...>
<generator class="sequence">
<param name="sequence">your_sequence_name</param>
</generator>
</id>
.....
4)线程
它使用高低算法来生成short, int和long类型的id。句法:
.....
<id ...>
<generator class="hilo"></generator>
</id>
.....
5)本地的
根据数据库供应商的不同, 它使用标识, 序列或hilo。句法:
.....
<id ...>
<generator class="native"></generator>
</id>
.....
6)身份
在Sybase, My SQL, MS SQL Server, DB2和HypersonicSQL中使用它来支持id列。返回的ID类型为short, int或long。数据库负责生成唯一标识符。
7)的后备箱
它对指定的序列名称使用高低算法。返回的ID类型为short, int或long。
8)uuid
它使用128位UUID算法生成ID。返回的ID为String类型, 在网络中是唯一的(因为使用IP)。 UUID以十六进制数字表示, 长度为32。
9)GUID
它使用由字符串类型的数据库生成的GUID。它适用于MS SQL Server和MySQL。 |
10)选择
它使用数据库触发器返回的主键。 |
11)外国
它使用另一个关联对象的ID, 通常与<one-to-one>关联一起使用。 |
12)序列同一性
它使用特殊的序列生成策略。仅Oracle 10g驱动程序支持。 |
评论前必须登录!
注册