Hibernate各種主鍵生成策略與配置詳解


 1 <?xml version="1.0"?>
 2 
 3 <!DOCTYPE hibernate-mapping PUBLIC  4  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  5  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 6 <hibernate-mapping package="com.mypro.id">
 7     <class name="User" table="user">
 8         <id name="id" column="Id" type="int">
 9             <generator class="navite"></generator>
10         </id>
11         <property name="name" column="name" type="string"></property>
12     </class>
13 </hibernate-mapping>

通過配置可以看到,我們有個實體類User,該類有一個id和name的屬性與數據庫中user表的id和name字段分別對應。其中

<generator class="navite"></generator>

定義了主鍵的生成方式,下面我們將會介紹到我們常用的主鍵生成方式

 

1、assigned

主鍵由外部程序負責生成,在 save() 之前必須指定一個,Hibernate不負責維護主鍵生成。也就是可以每次指定主鍵。該方式不推薦

 

2、increment

這種方式在每次插入前,需要通過“select max(主鍵) from 表名 ”這種方式先查詢最大ID,然后通過ID+1來作為新的主鍵值。這種方式也不推薦,因為這樣會出現線程安全問題。

 

3、identity

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

 

4、sequence

采用數據庫提供的sequence機制生成主鍵,需要數據庫支持sequence。如oralce、DB、SAP DB、PostgerSQL、McKoi中的sequence。MySQL這種不支持sequence的數據庫則不行

 

5、hilo

hilo(高低位方式high low)是hibernate中最常用的一種生成方式,需要一張額外的表保存hi的值。保存hi值的表至少有一條記錄(只與第一條記錄有關),否則會出現錯誤。可以跨數據庫。

 

6、native

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

 

7、uuid

UUID:Universally Unique Identifier,是指在一台機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的。按照開放軟件基金會(OSF)制定的標准計算,用到了以太網卡地址、納秒級時間、芯片ID碼和許多可能的數字,標准的UUID格式為:

xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM