1. 程式人生 > >簡述Hibernate主鍵生成策略

簡述Hibernate主鍵生成策略

HIbernate的主鍵型別有很多種,下面給大家介紹六種常見的主鍵型別

1.assigned:

    assigned主鍵由外部程式生成,在save()之前必須指定一個。assigned主鍵型別與HIbernate和底層資料庫都無關,所以可以跨資料庫操作。assigned在儲存物件面前,必須使用主鍵的setter方法進行賦值,至於這個值怎麼生成完全由自己決定,不建議使用。

2.identity:

   identity主鍵型別由底層資料庫自己生成,但是必須設為自動增長型別。使用identity主鍵的前提條件就是資料庫支援自動增長欄位型別,例如SQLServer,MySql,DB2,Sybase等。Oracle不支援自動增長欄位型別,則不能使用identity主鍵型別。

3.sequence:

   sequence主鍵型別是採用資料庫提供的sequence機制生成的主鍵,需要資料庫支援sequence型別,例如Oracle,DB,SAP DB,PostgerSQL,Mckoi等,而MySql不支援sequence型別。

4.increment:

    increment主鍵型別由Hibernate向資料庫獲取最大值(每個session獲取以一次),以這個最大值為基礎,每次增量加1,生成主鍵,不依賴於資料庫,可以進行跨資料庫操作。

5.uuid:

    uuid是指在一臺機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的。通常平臺會提供生成的API。按照

開放軟體基金會(OSF)制定的標準計算,用到了乙太網卡地址、納秒級時間、晶片ID碼和許多可能的數字

UUID由以下幾部分的組合:

(1)當前日期和時間,UUID的第一個部分與時間有關,如果你在生成一個UUID之後,過幾秒又生成一個UUID,則第一個部分不同,其餘相同。

(2)時鐘序列。

(3)全域性唯一的IEEE機器識別號,如果有網絡卡,從網絡卡MAC地址獲得,沒有網絡卡以其他方式獲得。

UUID的唯一缺陷在於生成的結果串會比較長。關於UUID這個標準使用最普遍的是微軟的GUID(Globals Unique Identifiers)。在ColdFusion中可以用CreateUUID()函式很簡單地生成UUID,其格式為:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每個 x 是 0-9 或 a-f 範圍內的一個十六進位制的數字。而標準的UUID格式為:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12),可以從cflib 下載CreateGUID() UDF進行轉換。

6.native:

   native主鍵型別由Hibernate根據使用資料庫自行判斷採用identity,sequence,Hilo其中一種作為主鍵生成方式,靈活性很強。

7.guid :

  全域性唯一識別符號(GUID,Globally Unique Identifier)是一種由演算法生成的二進位制長度為128位的數字識別符號。GUID主要用於在擁有多個節點、多臺計算機的網路或系統中。在理想情況下,任何計算機和計算機叢集都不會生成兩個相同的GUID。GUID 的總數達到了2^128(3.4×10^38)個,所以隨機生成兩個相同GUID的可能性非常小,但並不為0。所以,用於生成GUID的演算法通常都加入了非隨機的引數(如時間),以保證這種重複的情況不會發生。

GUID一詞有時也專指微軟對UUID標準的實現。

在 Windows 平臺上,GUID 廣泛應用於微軟的產品中,用於標識如登錄檔項、類及介面標識、資料庫、系統目錄等物件。