JPA註解
@GeneratedValue
為一個實體生成一個唯一標識的主鍵,JPA要求每一個實體Entity,必須有且只有一個主鍵,他提供了主鍵的生成策略。
@GeneratedValue註解有兩個屬性:strategy和generator
其中strategy用於標註主鍵的生成策略,默認情況下,JPA會自動選擇一個適合底層數據庫的主鍵生成策略;
generator屬性的值是一個字符串,默認為"",聲明了主鍵生成器的名稱(對應於同名的主鍵生成器@SequenceGenerator和@TableGenerator)。
在javax.persistence.GenerationType中定義了以下幾種可供選擇的策略:
–IDENTITY:采用數據庫ID自增長的方式來自增主鍵字段,Oracle 不支持這種方式;
–AUTO: JPA自動選擇合適的策略,是默認選項;
–SEQUENCE:通過序列產生主鍵,通過@SequenceGenerator 註解指定序列名,MySql不支持這種方式
–TABLE:通過表產生主鍵,框架借由表模擬序列產生主鍵,使用該策略可以使應用更易於數據庫移植。
可以在屬性上面或者getter上面進行註解 ;註意: 不能一部分註解在屬性上,一部分註解在getter上,否則會拋出異常
@GenericGenerator
自定義主鍵生成策略
就可以用hibernate特有以下用法來實現 ,Java代碼
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "assigned")
@GenericGenerator的定義: (Java代碼)
@Target({PACKAGE, TYPE, METHOD, FIELD}) @Retention(RUNTIME) public @interface GenericGenerator { /** * unique generator name */ String name(); /** * Generator strategy either a predefined Hibernate * strategy or a fully qualified class name. */ String strategy(); /** * Optional generator parameters
* parameters得到strategy指定的具體生成器所用到的參數 */ Parameter[] parameters() default {}; }
詳細介紹參考:http://blog.csdn.net/linan0930/article/details/21108411
JPA註解