資料庫的設計和操作中,我們通常會給表建立主鍵。
主鍵,可以分為自然主鍵和**主鍵。
自然主鍵表示:採用具有業務邏輯含義的字段作為表的主鍵。比如在使用者資訊表中,採用使用者的身份證號碼作為主鍵。但是這樣一來,隨著業務邏輯的變化,主鍵就有可能要更改。比如,假設哪天身份證號碼公升級成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中配置的資料庫方言。
5.uuid
* 唯一主鍵生成辦法。從hibernate中提取出來
優點:避免了生成id 時,與資料庫的再次交道,效能上較高。但對於有的開發人員不太習慣這種id生成方式,uuid生成的32為的字串,不同於identity 從1開始的整數。
xml**
1.2.
3. 4.
採用hibernate的主鍵生成策略,就可以比較靈活和方便的對錶中的主鍵字段進行操作了。而且,不同的資料庫,不同的主鍵形式,也只需要修改下對映檔案就可以了
Hibernate的ID生成策略
1.介紹 hibernate是目前最為常用的orm框架,當然也有人會選擇ibatis或者其他的架構.這裡我們著重講hibernate的id生成策略 2.可選的id策略生成方式 1 native auto 根據不同的資料庫採用不同的id生成方式,例如 在sql server中採用identity 在m...
Hibernate 元素 id生成策略
1 increment 對long int short的資料列生成自動增長主鍵。這種情況主要用於資料庫中未把 主鍵設定為自增,而又想 主鍵自增時。此方式的實現機制為在當前應用例項中維持乙個變數,以儲存著當前的最大值,之後每次需要生成主鍵的時候將此值加1作為主鍵。這種方式可能產生的問題是 如果當前有多...
Hibernate的id生成機制
下午學習的過程中遇到乙個問題 很糾結 寫的沒有錯 也能執行就是插不到資料庫裡去,找了很多方法都不行!最後發現 基於xml配置 常見的generator increment 用於long short int型別唯一標識,只有在沒有其他程序往同一張表中插入資料時才能使用,在集群下不能使用 identit...