Hibernate中常用的主鍵生成策略

2022-03-23 12:10:21 字數 1038 閱讀 9848

主鍵,可以分為自然主鍵和**主鍵。

自然主鍵表示:採用具有業務邏輯含義的字段作為表的主鍵。比如在使用者資訊表中,採用使用者的身份證號碼作為主鍵。但是這樣一來,隨著業務邏輯的變化,主鍵就有可能要更改。比如,假設哪天身份證號碼公升級成19,2位,那。。。。。。。

**主鍵:在表中人為的增加乙個字段,該字段並沒有表示任何的業務邏輯,僅僅用來標識一行資料。比如說在使用者資訊表中,增加乙個使用者id的字段。用來表示該條使用者資訊的記錄。

通常情況下,用的比較多的是**主鍵的形式。而且,我們習慣於於讓該主鍵字段能夠自動增長,來保證其唯一性。但是,不同的資料庫自動增長的方式並不是相同的。如在sqlserver中,用identity,mysql中,有increment,oracle中通常採用sequence。這樣一來,在資料庫的主鍵列操作上,便會顯得比較麻煩。

但是在hibernate中,提供了主鍵生成策略。下面是比較常用的幾種:

1:assigned

----表示在新增資料時由應用程式指定主鍵的值。主要針對主鍵是採用自然主鍵的形式。這種方式,適用於主鍵列不是自動增長列。

其缺點為在執行新增操作時,需查詢資料庫判斷生成的主鍵是否已經存在。

2:increment

----表示新增資料操作時由hibernate自動生成主鍵值。其生成的值為:先查詢該主鍵列的最大值,然後在最大值的基礎上加上1.適用於採用**主鍵形式的主鍵列。同樣不能用於主鍵列是自動增長的表。但是,該主鍵生成策略也有些缺點。

(1)新增資料前先查詢一遍,影響了效能。

(2)主鍵的型別只能為數值型的int或者long

(3)併發操作時的衝突問題。

3:identity

----不如說是為sqlerver資料庫量身定做的。主要適用於sqlserver資料庫的自動增長列的表。

4:native

----表示根據不同的資料庫採用不同的主鍵生成策略。比如,當前資料庫為sqlserver,則會採用identity,如為oracle,則採用

oracle中的sequence等。區分資料庫的不同是以hibernate主配置檔案中sessionfactory中配置的資料庫方言。

Hibernate常用主鍵生成策略

1 assign 適合於應用程式維護的自然主鍵。2 increment 主鍵,適合於所有資料庫,由hibernate維護主鍵自增,和底層資料庫無關,但是不適合於2個或以上hibernate程序。3 identity 主鍵,適合於mysql或ms sql server等支援自增的dbms,主鍵值不由h...

Hibernate主鍵自動生成的幾種常用型別

1.assigned 主鍵由資料庫內部生成,無需hibernate干預。2.hilo 需要額外資料庫表儲存主鍵生成歷史狀態。3.increment 在例項中維持乙個變數,以儲存當前最大值。多例項訪問時可能會出錯。4.identity 採用資料庫提供的生成機制,如sql server mysql中自增...

Hibernate主鍵的設定

1 適用於mysql,mssql 自動增長identity oracle不支援自動增長,但是支援序列,所以,這個方法一般用於mysql,mssql generator class identity generator 要想在hibernate中配置oracle的主鍵,需要用到序列 2 序列seque...