Hibernate主鍵生成策略即generator屬性解釋

★主鍵生成策略
1.Assigned :
主鍵由外部程序負責生成,在 save() 之前必須指定一個。Hibernate不負責維護主鍵生成。與Hibernate和底層數據庫都無關,可以跨數據庫。在存儲對象前,必須要使用主鍵的setter方法給主鍵賦值,至於這個值怎麼生成,完全由自己決定,這種方法應該儘量避免。
Assigned讓應用程序在調用 save() 之前爲對象分配一個標識符。這是 元素沒有指定時的
默認生成策略。
2.Increment
由Hibernate從數據庫中取出主鍵的最大值(每個session只取1次),以該值爲基礎,每次增量爲1,在內存中生成主鍵,爲 long, short 或者 int 類型生成 唯一標識。不依賴於底層的數據庫,因此可以跨數據庫。適合單一進程訪問數據庫,不能用於羣集環境。
3.Hilo
hilo(高低位方式high low)是hibernate中最常用的一種生成方式,需要一張額外的表保存hi的值。保存hi值的表至少有一條記錄(只與第一條記錄有關),否則會出現錯誤。可以跨數據庫

<id name="id" type="long" column="stu_id">
			<generator class="hilo">
				<param name="table">hi_value</param>
				<param name="column">next_value</param>
				<param name="max_lo">100</param>
			</generator>
</id>

4.Seqhilo
與 hilo 類似,通過 hi / lo 算法實現的主鍵生成機制,只是將 hilo 中的數據表換成了序列 sequence,需要數據庫中先創建 sequence,適用於支持 sequence 的數據庫,如 Oracle、DB2、SAP DB、PostgerSQL、McKoi。

<id name="id" column="ID">
     <generator class="seqhilo">
           <!-- 指定sequence名稱 --> 
           <param name="sequence">sequence</param>  
           <param name="max_lo">100</param>
     </generator> 
  </id>

5.sequence
一種特別的序列生成策略,它使用數據庫序列來生成實際值,但將它和 JDBC3 的
getGeneratedKeys 結合在一起,使得在插入語句執行的時候就返回生成的值。目前爲止只有
面向 JDK 1.4 的 Oracle 10g 驅動支持這一策略。由於 Oracle 驅動程序的一個 bug,這些
插入語句的註釋被關閉了
6.Identity
對 DB2,MySQL,MS SQL Server,Sybase 和 HypersonicSQL 的內置標識字段提供支持。返回
的標識符是 long,short 或者 int 類型的。

<id name="id" type="long" column="stu_id" unsaved-value="0">
         <generator class="identity"/>
</id>

7.Native
根據底層數據庫的能力選擇 identity、sequence 或者 hilo 中的一個。
8.uuid
用一個 128-bit 的 UUID 算法生成字符串類型的標識符,這在一個網絡中是唯一的(使用了
IP 地址)。UUID 被編碼爲一個 32 位 16 進制數字的字符串,可以跨數據庫。
UUID 包含:IP 地址、JVM 的啓動時間(精確到 1/4 秒)、系統時間和一個計數器值(在 JVM 中
唯一)。 在 Java 代碼中不可能獲得 MAC 地址或者內存地址,所以這已經是我們在不使用 JNI
的前提下的能做的最好實現了。
9.guid
在 MS SQL Server 和 MySQL 中使用數據庫生成的 GUID 字符串。移植性較弱。
10.foreign(弱爆了)
使用另外一個相關聯的對象的標識符。它通常和 聯合起來使用
參考文檔:Hibernate Reference Documentation(3.5.6-Final)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章