Hibernate主鍵生成策略generator

Hibernate提供的內置標識符生成器: 


一、increment 標識符生成器

increment 標識符生成器由 Hibernate 以遞增的方式爲代理主鍵賦值

Hibernate 會先讀取 NEWS 表中的主鍵的最大值, 而接下來向 NEWS 表中插入記錄時, 就在 max(id) 的基礎上遞增, 增量爲 1.
適用範圍:
由於 increment 生存標識符機制不依賴於底層數據庫系統, 因此它適合所有的數據庫系統
適用於只有單個 Hibernate 應用進程訪問同一個數據庫的場合, 在集羣環境下不推薦使用它
OID 必須爲 long, int 或 short 類型, 如果把 OID 定義爲 byte 類型, 在運行時會拋出異常

二、identity 標識符生成器

identity 標識符生成器由底層數據庫來負責生成標識符, 它要求底層數據庫把主鍵定義爲自動增長字段類型
適用範圍:
由於 identity 生成標識符的機制依賴於底層數據庫系統, 因此, 要求底層數據庫系統必須支持自動增長字段類型. 支持自動增長字段類型的數據庫包括: DB2, Mysql, MSSQLServer, Sybase 等
OID 必須爲 long, int 或 short 類型, 如果把 OID 定義爲 byte 類型, 在運行時會拋出異常

三、sequence 標識符生成器

sequence  標識符生成器利用底層數據庫提供的序列來生成標識符. 
Hibernate 在持久化一個 News 對象時, 先從底層數據庫的 news_seq 序列中獲得一個唯一的標識號, 再把它作爲主鍵值
適用範圍:
由於 sequence 生成標識符的機制依賴於底層數據庫系統的序列, 因此, 要求底層數據庫系統必須支持序列. 支持序列的數據庫包括: DB2, Oracle 等
OID 必須爲 long, int 或 short 類型, 如果把 OID 定義爲 byte 類型, 在運行時會拋出異常

四、hilo 標識符生成器

hilo 標識符生成器由 Hibernate 按照一種 high/low 算法*生成標識符, 它從數據庫的特定表的字段中獲取 high 值.
Hibernate 在持久化一個 News 對象時, 由 Hibernate 負責生成主鍵值. hilo 標識符生成器在生成標識符時, 需要讀取並修改 HI_TABLE 表中的 NEXT_VALUE 值.
適用範圍:
由於 hilo 生存標識符機制不依賴於底層數據庫系統, 因此它適合所有的數據庫系統
OID 必須爲 long, int 或 short 類型, 如果把 OID 定義爲 byte 類型, 在運行時會拋出異常

五、native 標識符生成器

native 標識符生成器依據底層數據庫對自動生成標識符的支持能力, 來選擇使用 identity, sequence 或 hilo 標識符生成器. 
適用範圍:
由於 native 能根據底層數據庫系統的類型, 自動選擇合適的標識符生成器, 因此很適合於跨數據庫平臺開發
OID 必須爲 long, int 或 short 類型, 如果把 OID 定義爲 byte 類型, 在運行時會拋出異常
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章