Hibernate生成器類
在Hibernate中,id元素的<generator>子元素用於生成持久化類的對象的唯一標識符。 Hibernate框架中定義了許多生成器類。
所有的生成器類都實現了org.hibernate.id.IdentifierGenerator接口。 應用程序員可以通過實現IdentifierGenerator接口來創建自己的生成器類。 Hibernate框架提供了許多內置的生成器類:
- assigned
- increment
- sequence
- hilo
- native
- identity
- seqhilo
- uuid
- guid
- select
- foreign
- sequence-identity
1. assigned
如果沒有使用<generator>元素,assigned是默認的生成器策略。在這種情況下,應用程序爲對象分配ID。 例如:
....
<hibernate-mapping>
<class ...>
<id ...>
<generator class="assigned"></generator>
</id>
.....
</class>
</hibernate-mapping>
2. increment
當沒有其他進程將數據插入此表時,纔會生成唯一的ID。 它生成short,int或long型標識符。 第一個生成的標識符通常爲1,然後每次遞增爲1。語法:
....
<hibernate-mapping>
<class ...>
<id ...>
<generator class="increment"></generator>
</id>
.....
</class>
</hibernate-mapping>
3. sequence
它使用數據庫的順序序列。如果沒有定義序列,它會自動創建一個序列。 在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>
.....
4. hilo
它使用高低算法來生成short,int和long類型的id。 語法:
.....
<id ...>
<generator class="hilo"></generator>
</id>
.....
5. native
它使用標識,序列或希洛取決於數據庫供應商。 語法:
.....
<id ...>
<generator class="native"></generator>
</id>
.....
6. identity
它用於Sybase,Mysql,MS SQL Server,DB2和Hypersonic SQL以支持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,主要用於**<一對一>**關聯。
12. sequence-identity
它使用特殊的序列生成策略。 僅在Oracle 10g驅動程序中支持。