国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Hibernate主鍵生成策略

2019-11-10 20:19:24
字體:
來源:轉載
供稿:網友

1、assigned

主鍵由外部程序負責生成,在save()之前必須指定一個,Hibernate不負責維護主鍵生成。與Hibernate和底層數據庫都無關,可以跨數據庫。

<id name="groupid" column="GROUPID"> <generator class="assigned" /></id>

2、sequence

采用數據庫提供的sequence機制生成主鍵,需要數據庫支持sequence 如Oracle、DB2。MySQL不支持

<id name="groupid" column="GROUPID"> <generator class="sequence"> <param name="sequence">hibernate_id</param> </generator></id>

Hibernate生成主鍵時,查找sequence并賦給主鍵值,主鍵值由數據庫生成,Hibernate不負責維護,使用時必須先創建一個sequence,如果不指定sequence名稱,則使用Hibernate默認的sequence,名稱為hibernate_sequence,前提要在數據庫中創建該sequence。

3、identity

identity由底層數據庫生成標識符。identity是由數據庫自己生成的,但這個主鍵必須設置為自增長,使用identity的前提條件是底層數據庫支持自動增長字段類型,如DB2、SQL Server、MySQL、Sybase和HypersonicSQL等,Oracle這類沒有自增字段的則不支持。

<id name="groupid" column="GROUPID"> <generator class="identity" /></id>

如果使用MySQL數據庫,則主鍵字段必須設置成auto_increment

id int(11) PRimary key auto_increment

4、native

native由hibernate根據使用的數據庫自行判斷采用identity、hilo、sequence其中一種作為主鍵生成方式,靈活性很強。如果能支持identity則使用identity,如果支持sequence則使用sequence。

<id name="groupid" column="GROUPID"> <generator class="native" /></id>

例如:MySQL使用identity,Oracle使用sequence

5、UUID

UUID:Universally Unique Identifier,是指在一臺機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的。

<id name="groupid" column="GROUPID"> <generator class="uuid" /></id>

Hibernate在保存對象時,生成一個UUID字符串作為主鍵,保證了唯一性,但其并無任何業務邏輯意義,只能作為主鍵,唯一缺點長度較大,32位(Hibernate將UUID中間的”-“刪除了)的字符串,占用存儲空間大,但是有兩個很重要的優點,Hibernate在維護主鍵時,不用去數據庫查詢,從而提高效率,而且它是跨數據庫的,以后切換數據庫極其方便。

特點:uuid長度大,占用空間大,跨數據庫,不用訪問數據庫就生成主鍵值,所以效率高且能保證唯一性,移植非常方便,推薦使用。

小結

以上為Hibernate常用的自帶生成策略,也包括increment、hilo、guid、foreign等等

手動指定用assignedOracle用sequenceMySQL用identity更靈活用native推薦使用UUID

作者:itmyhome


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德保县| 麦盖提县| 虎林市| 北海市| 枞阳县| 柘荣县| 安龙县| 澜沧| 徐水县| 鄂尔多斯市| 阿拉善左旗| 莱芜市| 齐河县| 博乐市| 象山县| 应用必备| 厦门市| 虞城县| 新田县| 岗巴县| 长沙县| 平阴县| 沭阳县| 隆德县| 佛冈县| 潜山县| 忻城县| 吕梁市| 都江堰市| 侯马市| 孟津县| 讷河市| 文山县| 宝坻区| 吴江市| 吴川市| 莫力| 息烽县| 东辽县| 新竹县| 沂水县|