Hibernate主鍵的建置原則
<class name="Customers" table="customers">
<id name="id" column="id">
<!-- 主鍵的建置原則 -->
<generator class="native"></generator>
</id>
<class>
<id>標籤是為每一個執行個體包含唯一的標識,唯一的標識要有主鍵產生器,可選的 <generator>子項目是一個java類的名字,用來為該持久化類的執行個體產生唯一的標識。
所有的主鍵產生器都實現org.hibernate.id.TableLoGenerator介面
下面主要討論一下hibernate內建產生器的快捷名字和使用
分為下面幾種:
increment,identity,sequence,
Hilo, seqhilo, uuid, guid, native, assigned, select, foreign, sequence-identity
分別來介紹一下這幾個取值的作用和意義:
increment
用於為long和short或者int類型產生唯一識別碼,只有在沒有其他進程往同一張表插入資料時才能使用,在集體下不要使用
ientity
對DB2,MySql,MS SQL Server,Sybase和HypersonicSQL的內建識別欄位提供支援,返回的標識符是long,short或者int類型的。
sequence
在DB2.,PostgreSQL,SAP DB,McKoi中使用序列,而在Interbase中使用產生器。返回的標識符是long,short或者int類型的。
hilo
使用一個高/低位演算法高效的生long,short,擷取int類型的標識符,給定義二表和欄位作為高位置的來源。高低位演算法產生的標識符只在一個特定的資料庫中是唯一的。
seqhilo
使用一個高/低位演算法來高效的產生long,short擷取int類型的標識符,給定一個資料庫序列的名字
uuid
用一個128-bit的UUID演算法產生字串類型的標識符,這是在一個網路中是唯一的,UUID被編碼為一個32位16進位數位字串
guid
在MS SQL Server和MySql中使用資料庫產生GUID字串
native
根據底層資料庫的能力選擇identity,sequence擷取hilo中的一個
assigned
讓應用程式在save()之前為對象分配一個標識符,這是<geneerator>元素沒有指定時的預設的建置原則
select
通過資料庫觸發器選擇一些唯一主鍵的行並返回主索引值來分配一個主鍵
foreign
通過另外一個相關聯的對象的標識符,通常和<ont-to-one>聯合起來使用
sequence-identity
一種特別的序列產生的策略,使得資料庫序列來產生實際值,但將它和JDBC3的getGeneratedKeys結合在一起,使得在插入語句執行的的時候就返回產生的值,目前為止只有物件導向JDK1.4的Oracle 10g驅動支援這一策略,注意,因為Oracle驅動程式的一個bug,這些插入語句的注釋被關閉了。
可以總結一下,對Oracle資料進行使用的有:
1) assigned
2) hilo
3) seqhilo
4) increment
5) identity
6) sequence
7) native方式。
8) uuid.hex 9) uuid.string
10) foreign