JPA:JPA的基本註解
@Entity
[email protected] 標註用於實體類宣告語句之前,指出該Java類為實體表,將對映到指定的資料庫表.
@Table
.當實體類與其對映的資料庫表名不同名時需要使用@Table標註說明,
該標註與@Entity標註並列使用,置於實體類宣告語句之前,可寫於單獨語句行,也可與宣告語句同行.
[email protected]標註的常用選項是name,用於指明資料庫的表名
[email protected]標註還有兩個選項catalog和schema用於設定表所屬的資料庫目錄或模式,通常為資料庫名.
uniqueConstraints選項用於設定約束條件,通常不設定
@Id
[email protected]標註用於宣告一個實體類的屬性對映為資料的主鍵列.該屬性通常置於屬性宣告之前,
可與宣告語句同行,也可寫在單獨行上.
[email protected]標註也可置於屬性的getter方法之前
@GeneratedValue
[email protected]用於標註主鍵的生成策略,通過strategy屬性指定.
預設情況下,JPA自動選擇一個最適合底層資料庫的主鍵生成策略:
SqlServer對應identity,MySQL對應auto increment
.在javax.persistence.GenerationType中定義了以下幾種可供選擇的策略:
-IDENTITY:採用資料庫ID自增長的方式來自增主鍵欄位,Oracle不支援這種方式
-AUTO(預設值):JPA自動選擇合適的策略,是預設選項
-SEQUENCE:通過序列產生主鍵,通過@SequenceGenerator註解指定序列名,Mysql不支援這種方式
-TABLE:通過表產生主鍵,框架藉由表模擬序列產生主鍵,使用該策略可以使應用更易於資料庫移植
@Basic
[email protected]表示一個簡單的屬性到資料庫表的欄位的對映,對於沒有任何標註的getXxx(),預設即為@Basic
-fetch:表示該屬性的讀取策略,有EAGER和LAZY兩種,分別表示主支抓取和延遲載入,預設為EAGER
-optional:表示該屬性是否允許為null,預設為true
@Column
.當實體的屬性與其對映的資料庫表的列不同名時需要使用
@Column標註說明:該屬性通常置於實體的屬性宣告語句之前.
還可以與@Id標註一起使用.
[email protected]標註的常用屬性是name,用於設定對映資料庫表的列名.
此外,該標註還包含其他很多屬性,如:unique,nullable(可否為空),length(長度)等
[email protected]標註的columnDefinition屬性:表示該欄位在資料庫中的實際型別,
通常ORM框架可以根據屬性型別自動判斷資料庫中的欄位的型別,
但是對於Date型別仍無法確定資料庫中欄位型別究竟是DATE,TIME還是TIMESTAMP.
String的預設對映型別為VARCHAR,如果要將String型別對映到特定資料庫的BLOB或
TEXT欄位型別
@Column標註也可置於屬性的getter()之前
@Transient
.表示該屬性並非一個到資料庫表的欄位的對映,ORM框架將忽略該屬性
.如果一個屬性並非資料庫表的欄位對映,就務必將其標示為@Transient,否則,ORM框架預設其註解為@Basic
@Temporal
.在核心的Java API中並沒有定義Date型別的精度(temporal,precision),而在資料庫中,
表示Date型別的資料有DATE,TIME和TIMESTAMP三種精度(即單純的日期,時間或者兩者兼備)
在進行屬性對映時可使用@Temporal註解來調整精度