JPA @Id 和 @GeneratedValue 注解詳解
@Id:
@Id 標注用於聲明一個實體類的屬性映射為數據庫的主鍵列。該屬性通常置於屬性聲明語句之前,可與聲明語句同行,也可寫在單獨行上。
@Id標注也可置於屬性的getter方法之前。
@GeneratedValue:
@GeneratedValue 用於標注主鍵的生成策略,通過strategy 屬性指定。默認情況下,JPA 自動選擇一個最適合底層數據庫的主鍵生成策略:SqlServer對應identity,MySQL 對應 auto increment。
在javax.persistence.GenerationType中定義了以下幾種可供選擇的策略:
–IDENTITY:采用數據庫ID自增長的方式來自增主鍵字段,Oracle 不支持這種方式;
–AUTO: JPA自動選擇合適的策略,是默認選項;
–SEQUENCE:通過序列產生主鍵,通過@SequenceGenerator 注解指定序列名,MySql不支持這種方式
–TABLE:通過表產生主鍵,框架借由表模擬序列產生主鍵,使用該策略可以使應用更易於數據庫移植。
推薦的兩種寫法:
屬性之上:
getter方法之上:
但是不能某個注解在屬性之上,某個注解在getter之上,將拋出異常,對其他注解也相同