JPA學習筆記(3)——JPA注解
@Entity
@Entity 標注用于實體類聲明語句之前。指出該Java 類為實體類,將映射到指定的數據庫表。
@Table
當實體類與其映射的數據庫表名不同名時須要使用 @Table 標注說明,該標注與 @Entity 標注并列使用,置于實體類聲明語句之前,可寫于單獨語句行。也可與聲明語句同行。
@Table 標注的經常使用選項是 name。用于指明數據庫的表名
@Table標注另一個兩個選項 catalog 和 schema 用于設置表所屬的數據庫文件夾或模式,通常為數據庫名。
@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:通過表產生主鍵,框架借由表模擬序列產生主鍵。使用該策略能夠使應用更易于數據庫移植。
@Basic
@Basic 表示一個簡單的屬性到數據庫表的字段的映射,對于沒有不論什么標注的 getXxxx() 方法,默認即為@Basic
fetch: 表示該屬性的讀取策略,有 EAGER 和 LAZY 兩種,分別表示主支抓取和延遲載入,默覺得 EAGER.
optional:表示該屬性是否同意為null, 默覺得true
@Column
當實體的屬性與其映射的數據庫表的列不同名時須要使用
@Column 標注說明。該屬性通常置于實體的屬性聲明語句之前,還可與 @Id 標注一起使用。
@Column 標注的經常使用屬性是 name,用于設置映射數據庫表的列名。此外。該標注還包括其他多個屬性,如:unique 、nullable、length 等。
@Column 標注的 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注解來調整精度.
PS:以上內容參考@尚硅谷的PPT

浙公網安備 33010602011771號