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

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

Hibernate主鍵生成策略

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 彭州市| 青岛市| 云霄县| 新丰县| 林甸县| 濉溪县| 周口市| 贵州省| 阜阳市| 宜丰县| 满洲里市| 房产| 伊宁县| 广丰县| 延津县| 宁武县| 九江县| 唐海县| 舒兰市| 南昌市| 上思县| 北碚区| 临夏县| 博湖县| 景宁| 水富县| 彝良县| 西乡县| 大荔县| 武冈市| 汝南县| 育儿| 宁阳县| 新乐市| 永福县| 兰州市| 罗江县| 茂名市| 天峻县| 拜城县| 昭通市|