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