hibernate的主鍵生成策略
一共是13種,其中包括native
native: 對於 oracle 采用 Sequence 方式,對於MySQL 和 SQL Server 采用identity(自增主鍵生成機制),native就是將主鍵的生成工作交由數據庫完成,hibernate不管(很常用)。
uuid: 采用128位的uuid算法生成主鍵,uuid被編碼為一個32位16進制數字的字符串。占用空間大(字符串類型)。
hilo: 使用hilo生成策略,要在數據庫中建立一張額外的表,默認表名為hibernate_unique_key,默認字段為integer類型,名稱是next_hi(比較少用)。
assigned: 在插入數據的時候主鍵由程序處理(很常用),這是 <generator>元素沒有指定時的默認生成策略。等同於JPA中的AUTO。
identity: 使用SQL Server 和 MySQL 的自增字段,這個方法不能放到 Oracle 中,Oracle 不支持自增字段,要設定sequence(MySQL 和 SQL Server 中很常用)。 等同於JPA中的INDENTITY。
select: 使用觸發器生成主鍵(主要用於早期的數據庫主鍵生成機制,少用)。
sequence: 調用底層數據庫的序列來生成主鍵,要設定序列名,不然hibernate無法找到。
seqhilo: 通過hilo算法實現,但是主鍵歷史保存在Sequence中,適用於支持 Sequence 的數據庫,如 Oracle(比較少用)
increment: 插入數據的時候hibernate會給主鍵添加一個自增的主鍵,但是一個hibernate實例就維護一個計數器,所以在多個實例運行的時候不能使用這個方法。
foreign: 使用另外一個相關聯的對象的主鍵。通常和<one-to-one>聯合起來使用。
guid: 采用數據庫底層的guid算法機制,對應MYSQL的uuid()函數,SQL Server的newid()函數,ORACLE的rawtohex(sys_guid())函數等。
uuid.hex: 看uuid,建議用uuid替換。
sequence-identity: sequence策略的擴展,采用立即檢索策略來獲取sequence值,需要JDBC3.0和JDK4以上(含1.4)版本
hibernate提供了多種生成器供選擇,基於Annotation的方式通過@GenericGenerator實現.
hibernate每種主鍵生成策略提供接口org.hibernate.id.IdentifierGenerator的實現類,如果要實現自定義的主鍵生成策略也必須實現此接口.