在Hibernate中,id
元素的<generator>
子元素用于生成持久化類的對象的唯一標(biāo)識符。 Hibernate框架中定義了許多生成器類。
所有的生成器類都實(shí)現(xiàn)了org.hibernate.id.IdentifierGenerator
接口。 應(yīng)用程序員可以通過實(shí)現(xiàn)IdentifierGenerator
接口來創(chuàng)建自己的生成器類。 Hibernate框架提供了許多內(nèi)置的生成器類:
如果沒有使用<generator>
元素,assigned
是默認(rèn)的生成器策略。在這種情況下,應(yīng)用程序?yàn)閷ο蠓峙?code>ID。 例如:
....
<hibernate-mapping>
<class ...>
<id ...>
<generator class="assigned"></generator>
</id>
.....
</class>
</hibernate-mapping>
當(dāng)沒有其他進(jìn)程將數(shù)據(jù)插入此表時(shí),才會生成唯一的ID
。 它生成short
,int
或long
型標(biāo)識符。 第一個(gè)生成的標(biāo)識符通常為1
,然后每次遞增為1
。語法:
....
<hibernate-mapping>
<class ...>
<id ...>
<generator class="increment"></generator>
</id>
.....
</class>
</hibernate-mapping>
它使用數(shù)據(jù)庫的順序序列。如果沒有定義序列,它會自動(dòng)創(chuàng)建一個(gè)序列。 在Oracle數(shù)據(jù)庫的情況下,它將創(chuàng)建一個(gè)名為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>
.....
它使用標(biāo)識,序列或希洛取決于數(shù)據(jù)庫供應(yīng)商。 語法:
.....
<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
類型,在網(wǎng)絡(luò)中是唯一的(因?yàn)槭褂昧薎P)。 UUID
以十六進(jìn)制數(shù)字表示,長度為32
。
它使用由字符串類型的數(shù)據(jù)庫生成的GUID
。 它適用于MS SQL Server和MySQL。
它使用數(shù)據(jù)庫觸發(fā)器返回主鍵。
它使用另一個(gè)關(guān)聯(lián)對象的id
,主要用于<一對一>關(guān)聯(lián)。
它使用特殊的序列生成策略。 僅在Oracle 10g驅(qū)動(dòng)程序中支持。