hibernate注解主鍵生成策略


Id生成策略:

@GeneratedValue,JPA通用策略生成器

        JPA提供的四種標准用法為TABLE,SEQUENCE,IDENTITY,AUTO. 
          TABLE:使用一個特定的數據庫表格來保存主鍵。 
          SEQUENCE:根據底層數據庫的序列來生成主鍵,條件是數據庫支持序列。 

@Id  
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="payablemoney_seq")  
@SequenceGenerator(name="payablemoney_seq", sequenceName="seq_payment")  

          IDENTITY:主鍵由數據庫自動生成(主要是自動增長型) 

@Id  
@GeneratedValue(strategy = GenerationType.IDENTITY)  

          AUTO:主鍵由程序控制。  

@Id  
@GeneratedValue(strategy = GenerationType.AUTO) 

@GenericGenerator hibernate主鍵策略生成器 

 @GenericGenerator注解配合@GeneratedValue一起使用,@GeneratedValue注解中的"generator"屬性要與@GenericGenerator注解中name屬性一致,strategy屬性表示hibernate的主鍵生成策略 

@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")

 

native: 對於 oracle 采用 Sequence 方式,對於MySQL 和 SQL Server 采用identity(自增主鍵生成機制),native就是將主鍵的生成工作交由數據庫完成,hibernate不管(很常用)。 

@GeneratedValue(generator = "xxx")    
@GenericGenerator(name = "xxx", strategy = "native")   

 


uuid: 采用128位的uuid算法生成主鍵,uuid被編碼為一個32位16進制數字的字符串。占用空間大(字符串類型)。 

@GeneratedValue(generator = "xxx")    
@GenericGenerator(name = "xxx", strategy = "uuid")   

 


hilo: 使用hilo生成策略,要在數據庫中建立一張額外的表,默認表名為hibernate_unique_key,默認字段為integer類型,名稱是next_hi(比較少用)。 

@GeneratedValue(generator = "xxx")    
@GenericGenerator(name = "xxx", strategy = "hilo")   

 


assigned: 在插入數據的時候主鍵由程序處理(很常用),這是 <generator>元素沒有指定時的默認生成策略。等同於JPA中的AUTO。 

@GeneratedValue(generator = "xxx")    
@GenericGenerator(name = "xxx", strategy = "assigned ")   

 


identity: 使用SQL Server 和 MySQL 的自增字段,這個方法不能放到 Oracle 中,Oracle 不支持自增字段,要設定sequence(MySQL 和 SQL Server 中很常用); 等同於JPA中的INDENTITY。 

@GeneratedValue(generator = "xxx")    
@GenericGenerator(name = "xxx", strategy = "identity ") 

 


sequence: 調用底層數據庫的序列來生成主鍵,要設定序列名,不然hibernate無法找到。 

@GeneratedValue(generator = "xxx")  
@GenericGenerator(name = "xxx", strategy = "sequence", parameters = { @Parameter(name = "sequence", value = "底層數據庫sequenceName") }


increment: 插入數據的時候hibernate會給主鍵添加一個自增的主鍵,但是一個hibernate實例就維護一個計數器,所以在多個實例運行的時候不能使用這個方法。 

@GeneratedValue(generator = "xxx")    
@GenericGenerator(name = "xxx", strategy = "increment")   

 


guid: 采用數據庫底層的guid算法機制,對應MYSQL的uuid()函數,SQL Server的newid()函數,ORACLE的rawtohex(sys_guid())函數等。 

@GeneratedValue(generator = "xxx")    
@GenericGenerator(name = "xxx", strategy = "guid")   

 


uuid.hex: 看uuid,建議用uuid替換。 

@GeneratedValue(generator = "xxx")    
@GenericGenerator(name = "xxx", strategy = "uuid.hex")   

 

 

       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM