1. 程式人生 > >JPA:JPA的基本註解

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註解來調整精度