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

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

Hibernate主鍵生成策略

2019-11-10 18:08:17
字體:
來源:轉載
供稿:網友

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巫溪县| 微博| 湖北省| 娄烦县| 泾阳县| 吴忠市| 伽师县| 安阳市| 新安县| 视频| 花垣县| 策勒县| 香格里拉县| 德庆县| 汕尾市| 大关县| 昭平县| 朝阳区| 图木舒克市| 舟山市| 铁岭县| 砚山县| 青龙| 安福县| 渝中区| 南丰县| 都江堰市| 宁武县| 资源县| 萨迦县| 长寿区| 威海市| 微山县| 昌图县| 太谷县| 宜兰县| 图木舒克市| 随州市| 林芝县| 夹江县| 鄯善县|