hibernate中主鍵生成方式

2021-08-31 08:07:07 字數 1419 閱讀 9609

[color=darkblue]

[/color]

1、[color=green]assigned[/color]

主鍵由應用邏輯產生,資料交由hibernate儲存時,主鍵值已經設定完畢,無需hibernate干預。(在主鍵要特殊設定,有特殊意義的情況下使用,hibernate不會自動生成了,否則會生成後替換到自己設定的主鍵)

2、[color=olive]hilo[/color]

通過hi/lo演算法實現主鍵生成建機制,需要額外的資料庫表儲存主鍵生成的歷史狀態。

3、[color=cyan]seqhilo[/color]

與hilo類似,通過hi/lo演算法實現的主鍵生成機制,只要主鍵歷史狀態儲存在sequence中,適用於支援sequence的資料庫,例如:oracle。

4、[color=darkred]increment[/color]

主鍵按數值順序遞增,此方式的實現機制為在當前應用例項中維持乙個變數,以儲存著當前的最大值,之後每次需要生成之間的時候將此值基礎上加1作為主鍵。

這種方式可能產生的問題是:如果當前有多個例項訪問同乙個資料庫,那麼由於各個例項各自維護主鍵狀態,不同的例項可能生成相同的主鍵,從而造成主鍵重複異常。因此。如果同乙個資料庫有多個例項訪問,此方式必須避免使用。

5、[color=brown]identity[/color]

採用資料庫提供的主鍵生成機制,如sql server,mysql中的自增主鍵生成機制。

6、[color=violet]sequence[/color]

採用資料庫提供的sequence機制生成主鍵,如oracle sequence

7、[color=blue]native[/color]

由hibernate根據資料庫介面卡中的定義,自動採用identity、hilo、sequence的其中一種作為主鍵生成方式。

8、[color=black]uuid.hex[/color]

由hibernate基於128位唯一值產生演算法,根據當前裝置ip,時間,jvm啟動時間,內部自增量等4個引數生成十六進製制陣列(編碼後以長度為32位的字串表示)作為主鍵。

這種演算法在最大程度上保證了產生id的唯一性,即使是在多例項並發運**況下,當然,重複的概率在理論上依然存在,只是實際上太過於渺茫。

一般而言,利用uuid.hex方式生成主鍵將提供做好的資料插入效能和資料庫平台適用性。

9、[color=green]uuid.string[/color]

與uuid.hex類似,只是生成的主鍵未進行編碼(長度16位)。在某些資料庫中可能出現問題(如postgresql)

10、[color=gray]foreign[/color]

使用外部表的字段作為主鍵。

11、[color=orange]select[/color]

hibernate3中新引入的主鍵獲取機制,主要針對遺留系統的改造工程。

Hibernate主鍵生成方式

nhibernate主鍵生成方式 hibernate主鍵生成方式 key generator 主鍵產生器 可選項說明 1 assigned 主鍵由外部程式負責生成,無需hibernate參與。2 hilo 通過hi lo 演算法實現的主鍵生成機制,需要額外的資料庫表儲存主 鍵生成歷史狀態。3 seq...

Hibernate主鍵生成方式

hibernate主鍵生成方式 hibernate負責管理主鍵值。hibernate提供了多種主鍵生成方式。主要有以下幾種 a.sequence 可以按指定序列生成主鍵值。只適用於支援序列的資料庫,如oracle。序列名b.identity 按資料庫自動增長機制生成主鍵值。一般用於mysql sql...

Hibernate主鍵的生成方式

1 assigned 所有的資料庫都適用 在呼叫s e 方法之前,要對主鍵設定值,不設定報錯 2 increment 按照資料庫的乙個順序值來增長 適用於mysql oracle db2 sqlserver h2等資料庫 注意 每次新增前,都會查詢主鍵的最大值 然後在其基礎上加1,作為新增的主鍵值 ...