Hibernate主鍵增加方式

來源:互聯網
上載者:User

1.assigned:

主鍵由外部程式負責產生,無需Hibernate參與。----如果要由程式碼來指定主鍵,就采有這種.

2.increment:

對 long , short 或 int 的資料列產生自動成長主鍵。increment主鍵產生方式的特點是與底層資料庫無關性,大部分資料庫如 Mysql,MSSQL 和ORACLE等都支援increament產生方式。此方式的實現機製為在當前應用執行個體中維持一個變數,以儲存著當前的最大值,之後每次需要產生主鍵的 時候將此值加1作為主鍵。increment方式的不足之處是當多個線程並發對資料庫表進行寫操作時,可能出現相同的主索引值,發生主鍵重複的衝突,因此多線程並行作業時,不應該使用此方法。

3.identity:

如果資料列的類型是 long, short 或 int ,可使用主鍵產生器產生自動成長Hibernate主鍵。與底層資料庫有關,要求資料庫支援identify,如MySQL中是auto_increment,SQL Server中是Identify.支援的資料庫有MySQL,SQL Server,DB2,Sybase和HypersonicSQL.(好像不支援oracle) 無需Hibernate和使用者的幹涉,使用較為方便,但不便於在不同的資料庫之間移植程式。identity的優點是不會發生 increment方式的並發錯做問題。資料庫涉及到的表要設定自動成長。

4.sequence:

在ORACLE等資料庫中使用sequence產生主鍵。sequence的特點是於資料庫的相關性,seqhio要求底層能支援sequence,列如Oracle。

5.hilo:

通過hi/lo 演算法產生主鍵,需要一個表來儲存額外的主鍵資訊。這樣產生的標識符只在特定的資料庫是唯一的,在使用JTA(Java分散式交易) 獲得連結或使用者自訂提供的連結中,不要使用這種產生器。hilo方式需要維護表資訊,因此對資料的影響的要率會造成一定影響。

6.seqhio:

與hilo 類似,通過hi/lo 演算法實現的主鍵產生機制,只是主鍵曆史狀態儲存在Sequence中,適用於支援Sequence的資料庫,如Oracle。如果資料列的類型是 long, short 或 int可使用該主鍵產生器。

7.native:

由Hibernate根據不同的資料庫方言,自行判斷採用identity、hilo、sequence其中一種作為Hibernate主鍵產生方式,native的 優點是與底層性無關,便於不同資料庫之間的移植,由Hibernate根據不同資料庫選擇主鍵的產生方式。在oracle中需要建立叫 Hibernate_sequence名字的sequence,如果設定了Hibernate.hbm2ddl.auto屬性,不需要手動建立序列,前提 是資料庫帳號必須有Create Sequence這種進階許可權。mysql等資料庫則不用建立sequence。

8.uuid.hex:

採用基於128位的演算法產生唯一值,並編製成32位長度的唯一字串作為主索引值,uuid.hex的優點是支援大部分資料庫,缺點就是要佔用較大的儲存空間。對於並發Insert要求較高的系統,推薦採用uuid.hex 作為主鍵產生機制。

9.uuid.string:

使用UUID演算法,UUID被編碼為一個16個字元長的任意ASCII字元組成的字串。不能在PostgreSQL資料庫中使用。uuid.string同uuid.hex類似,需要佔很大的儲存空間。

10.foreign:

使用外部表格的欄位作為Hibernate主鍵。

一般而言,利用uuid.hex方式產生Hibernate主鍵將提供最好的效能和資料庫平台適應性。
另外由於常用的資料庫,如Oracle、DB2、 SQLServer、MySql 等,都提供了易用的主鍵產生機制(Auto-Increase 欄位或者Sequence)。我們可以在資料庫提供的主鍵產生機制上,採用generator-class=native的主鍵產生方式。不過值得注意的 是,一些資料庫提供的主鍵產生機制在效率上未必最佳,大量並發insert資料時可能會引起表之間的互鎖。資料庫提供的主鍵產生機制,往往是通過在一個內 部表中儲存當前主鍵狀態(如對於自增型主鍵而言,此內部表中就維護著當前的最大值和遞增量),之後每次插入資料會讀取這個最大值,然後加上遞增量作為新記 錄的主鍵,之後再把這個新的最大值更新回內部表中,這樣,一次Insert操作可能導致資料庫內部多次表讀寫操作,同時伴隨的還有資料的加鎖解鎖操作,這對效能產生了較大影響。因此,對於並發Insert要求較高的系統,推薦採用uuid.hex 作為主鍵產生機制。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.