hibernate annotation 主鍵生成策略的相關配置

Hibernate 默認總共支持 13 種生成策略 :


1. increment

2.  identity    

3. sequence


4. hilo     

5. seqhilo       

6. uuid


7. uuid.hex       

8. guid        

9. native


10. assigned

11. select    

12. foreign      

13. sequence-identity

 

下面介紹幾個較爲常用的策略 :


① identity [ 自然遞增 ]

         支持 DB2,MySQL,SQL Server,Sybase 和HypersonicSQL 數據庫, 用於爲 long 或 short 或 int 類型生成唯一標識。它依賴於底層不同的數據庫,
       與 Hibernate 和 程序員無關。

註解示例 :

@Id

@GenericGenerator(name = "idGenerator", strategy = "identity")

@GeneratedValue(generator = "idGenerator")

 

② sequence [ 序列 ]

支持 Oracle,DB2,PostgreSql,SAPDb 等數據庫,用於爲 long 或 short 或 int 類型生成唯一標識。它需要底層數據庫的支持,
       並由數據庫來維護這個 sequence 序列。

註解示例 :

@Id

   @GenericGenerator(name = "idGenerator", strategy = "sequence",

parameters = {@Parameter(name = "sequence",value="seq_name")})

   @GeneratedValue(generator = "idGenerator")

注意 : 該策略要求設定序列名,否則 hibernate 將無法找到,這將引致拋出異常 :

org.hibernate.exception.SQLGrammarException: could not get next sequence value

 

③ native

         需底層數據庫的支持,對於 MySQL,SQL Server 採用 identity 的生成策略,對於 Oracle,則採用 sequence 策略。

註解示例 :

@Id

   @GenericGenerator(name = "idGenerator", strategy = "native")

   @GeneratedValue(generator = "idGenerator")

 

④ increment [ 自然遞增 ]

       與 identity 策略不同的是,該策略不依賴於底層數據庫,而依賴於 hibernate 本身,用於爲 long 或 short 或 int 類型生成唯一標識。
       主鍵計數器是由 hibernate 的一個實例來維護,每次自增量爲 1,但在集羣下不能使用該策略,
       否則將引起主鍵衝突的情況,該策略適用於所有關係型數據庫使用。

註解示例 :

       @Id

   @GenericGenerator(name = "idGenerator", strategy = "increment")

   @GeneratedValue(generator = "idGenerator")

 

⑤ uuid [ 32位16進制數的字符串 ]

         採用128位UUID算法生成主鍵,能夠保證網絡環境下的主鍵唯一性,也就能夠保證在不同數據庫及不同服務器下主鍵的唯一性。
       uuid 最終被編碼成一個32位16進制數的字符串,
       佔用的存儲空間較大。用於爲 String 類型生成唯一標識,適用於所有關係型數據庫。

註解示例 :

       @Id

   @GenericGenerator(name = "idGenerator", strategy = "uuid")

   @GeneratedValue(generator = "idGenerator")

 

⑤ assigned [ 手工分配主鍵ID值 ]

       該策略要求程序員必須自己維護和管理主鍵,當有數據需要存儲時,程序員必須自己爲該數據分配指定一個主鍵ID值,
       如果該數據沒有被分配主鍵ID值或分配的值存在重複,則該數據都將無法被持久化且會引起異常的拋出。

註解示例 :

       @Id

   @GenericGenerator(name = "idGenerator", strategy = "assigned")

   @GeneratedValue(generator = "idGenerator")

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章