Hibernate的主鍵聲稱策略

2021-07-02 23:03:44 字數 1307 閱讀 1868

1. 背景

資料庫的設計和操作中,我們通常會給表建立主鍵。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* 唯一主鍵生成辦法。從hibernate中提取出來 

優點:避免了生成id 時,與資料庫的再次交道,效能上較高。但對於有的開發人員不太習慣這種id生成方式,uuid生成的32為的字串,不同於identity 從1開始的整數。 

採用hibernate的主鍵生成策略,就可以比較靈活和方便的對錶中的主鍵字段進行操作了。而且,不同的資料庫,不同的主鍵形式,也只需要修改下對映檔案就可以了。

: 

Hibernate主鍵的設定

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

hibernate的幾種主鍵

public class generator extends hibernateutil hibernate insert into person name,id values 1 表必須支援自動增長機制 在mysql中加入autoincrement 2 主鍵的產生是資料庫產生的,並不是由hiber...

MybatisPlus的各種支援的主鍵策略!

目錄注 本文 樣例及sql指令碼均已上傳至gitee spring boot mybatis plus學習 mybatisplus支援的主鍵策略定義在idtype中 值描述 auto 資料庫id自增 none 無狀態,該型別為未設定主鍵型別 註解裡等於跟隨全域性,全域性裡約等於 input inpu...