Hibernate主鍵生成方式淺析
1 increment:
當(dāng)向數(shù)據(jù)庫中插入新的紀(jì)錄時,Hibernate主鍵會自動增長1。increment主鍵生成方式的特點是與底層數(shù)據(jù)庫無關(guān)性,大部分?jǐn)?shù)據(jù)庫如 Mysql,MSSQL 和ORACLE等都支持increament生成方式。increment方式的不足之處是當(dāng)多個線程并發(fā)對數(shù)據(jù)庫表進行寫操作時,可能出現(xiàn)相同的主鍵值,發(fā)生主鍵重復(fù)的沖突,因此多線程并發(fā)操作時,不應(yīng)該使用此方法
2 identity:
使用數(shù)據(jù)庫提供的主鍵生成機制,自動為主鍵賦值,indentity方式的特點是與底層數(shù)據(jù)庫無關(guān)性,不便于不同數(shù)據(jù)庫之間的移植。identity的優(yōu)點是不會發(fā)生 increment方式的并發(fā)錯做問題。
3 native:
由hibernate根據(jù)不同的數(shù)據(jù)庫方言,自動選擇不同的主鍵生成方式,native的優(yōu)點是與底層性無關(guān),便于不同數(shù)據(jù)庫之間的移植,由Hibernate根據(jù)不同數(shù)據(jù)庫選擇主鍵的生成方式
4 uuid.hex:
采用基于128位的算法生成***值,并編制成32位長度的***字符串作為主鍵值,uuid.hex的優(yōu)點是支持大部分?jǐn)?shù)據(jù)庫,缺點就是要占用較大的存儲空間。
5 uuid.string
使用UUID算法,UUID被編碼為一個16個字符長的任意ASCII字符組成的字符串。不能再PostgreSQL數(shù)據(jù)庫中使用。uuid.string同uuid.hex類似,需要占很大的存儲空間。
6 hilo:
通過一定的算法生成Hibernate主鍵主鍵,需要一個表來保存額外的主鍵信息。這樣生成的標(biāo)識符只在特定的數(shù)據(jù)庫是***的,在使用JTA(Java分布式事務(wù)) 獲得鏈接或用戶自定義提供的鏈接中,不要使用這種生成器。hilo方式需要維護表信息,因此對數(shù)據(jù)的影響的要率會造成一定影響。
7 sequence:
在ORACLE等數(shù)據(jù)庫中使用sequence生成主鍵。sequence的特點是于數(shù)據(jù)庫的相關(guān)性,seqhio要求底層能支持sequence,列如Oracle。
8 seqhio:
通過一定的算法來生成Hibernate主鍵主鍵,采用給定的數(shù)據(jù)庫的sqlsequence開生成外鍵。ceqhio方式的特點外還具有Hil哦的大。
【編輯推薦】