Hibernate識別符號生成器

wangccsy發表於2007-09-17

“hilo”
通過hi/lo 演算法實現的主鍵生成機制,需要額外的資料庫表或欄位提供高位值來源。

“seqhilo”
與hilo 類似,通過hi/lo 演算法實現的主鍵生成機制,需要資料庫中的 Sequence,適用於支援 Sequence 的資料庫,如Oracle。

“increment”
主鍵按數值順序遞增。此方式的實現機制為在當前應用例項中維持一個變數,以儲存著當前的最大值,之後每次需要生成主鍵的時候將此值加1作為主鍵。這種方式可能產生的問題是:不能在叢集下使用。

“identity”
採用資料庫提供的主鍵生成機制。如DB2、SQL Server、MySQL 中的主鍵生成機制。

“sequence”
採用資料庫提供的 sequence 機制生成主鍵。如 Oralce 中的Sequence。

“native”
由 Hibernate 根據使用的資料庫自行判斷採用 identity、hilo、sequence 其中一種作為主鍵生成方式。

“uuid.hex”
由 Hibernate 基於128 位 UUID 演算法 生成16 進位制數值(編碼後以長度32 的字串表示)作為主鍵。

“uuid.string”
與uuid.hex 類似,只是生成的主鍵未進行編碼(長度16),不能應用在 PostgreSQL 資料庫中。

“foreign”
使用另外一個相關聯的物件的識別符號作為主鍵。

以下舉例:
1、指定引數的情況:
   
     
        SEQ_CHILD
     

使用的是sequence,適合oracle資料庫;

2、對於sql server2000中的資料庫子增欄位,在配置檔案使用下列方法實現:

    
    

這裡主要是:identity:代表由sql server2000資料庫自己提供子增欄位.如果要hibernate自己提供,則用increment關鍵字來實現

3、如果表中的主鍵用字串型別:可以用hibernate自己提供的方法實現主鍵唯一:
 
     
     
 
使用的是uuid.hex: 採用128位的演算法來生成一個32位字串。最通用的一種方式。適用於所有資料庫。

 

 

關鍵字:   識別符號    
1,increment
代理主鍵,由Hibernate自動以遞增方式生成識別符號,每次增量為1。
優點:不依賴於底層資料庫系統,適用於所有的資料庫系統。
缺點:只適用於單個Hibernate應用程式訪問同一個資料庫的場合,在叢集環境下不推薦使用。

2,identity
代理主鍵,由底層資料庫生成識別符號。
前提條件:資料庫支援自動增長欄位型別。
資料庫定義:MySql                     auto_increment
                      MS SQL Server     identity

3,sequence
代理主鍵,Hibernate根據底層資料庫的序列來生成識別符號。
前提條件:資料庫支援序列。

4,hilo
代理主鍵,Hibernate根據high/low演算法來生成識別符號。
Hibernate把特定表的欄位作為“high”值。在預設情況下選用hibernate_unique_key表的next_hi欄位

5,native
代理主鍵,根據資料庫自動識別型別,identity,sequence或hilo。
MySql和MS SQL Server :identity
oracle : sequence
優點:適用於跨資料庫平臺開發。

6,assigned
自然主鍵


相關文章