@Entity 標註用於實體類聲明語句以前。指出該Java 類爲實體類,將映射到指定的數據庫表。java
當實體類與其映射的數據庫表名不一樣名時需要使用 @Table 標註說明,該標註與 @Entity 標註並列使用,置於實體類聲明語句以前,可寫於單獨語句行。也可與聲明語句同行。數據庫
@Table 標註的常常使用選項是 name。用於指明數據庫的表名markdown
@Table標註另外一個兩個選項 catalog 和 schema 用於設置表所屬的數據庫文件夾或模式,一般爲數據庫名。框架
@Id 標註用於聲明一個實體類的屬性映射爲數據庫的主鍵列。ide
該屬性一般置於屬性聲明語句以前,可與聲明語句同行。也可寫在單獨行上。post
@Id標註也可置於屬性的getter方法以前。fetch
@GeneratedValue 用於標註主鍵的生成策略,經過 strategy 屬性指定。默認狀況下,JPA 本身主動選擇一個最適合底層數據庫的主鍵生成策略:SqlServer 相應 identity,MySQL 相應 auto increment。ci
在 javax.persistence.GenerationType 中定義了下面幾種可供選擇的策略:rem
IDENTITY:採用數據庫 ID自增加的方式來自增主鍵字段,Oracle 不支持這樣的方式。get
AUTO: JPA本身主動選擇合適的策略。是默認選項。
SEQUENCE:經過序列產生主鍵,經過 @SequenceGenerator 註解指定序列名,MySql 不支持這樣的方式
TABLE:經過表產生主鍵,框架藉由表模擬序列產生主鍵。使用該策略可以使應用更易於數據庫移植。
@Basic 表示一個簡單的屬性到數據庫表的字段的映射,對於沒有不論什麼標註的 getXxxx() 方法,默認即爲@Basic
fetch: 表示該屬性的讀取策略,有 EAGER 和 LAZY 兩種,分別表示主支抓取和延遲載入,默以爲 EAGER.
optional:表示該屬性是否贊成爲null, 默以爲true
當實體的屬性與其映射的數據庫表的列不一樣名時需要使用
@Column 標註說明。該屬性一般置於實體的屬性聲明語句以前,還可與 @Id 標註一塊兒使用。
@Column 標註的常常使用屬性是 name,用於設置映射數據庫表的列名。此外。該標註還包括其餘多個屬性,如:unique 、nullable、length 等。
@Column 標註的 columnDefinition 屬性: 表示該字段在數據庫中的實際類型.一般 ORM 框架可以依據屬性類型本身主動推斷數據庫中字段的類型,但是對於Date類型仍沒法肯定數據庫中字段類型究竟是DATE,TIME仍是TIMESTAMP.此外,String的默認映射類型爲VARCHAR, 假設要將 String 類型映射到特定數據庫的 BLOB 或TEXT 字段類型.
@Column標註也可置於屬性的getter方法以前
表示該屬性並非一個到數據庫表的字段的映射,ORM框架將忽略該屬性.
假設一個屬性並非數據庫表的字段映射,就務必將其標示爲@Transient,不然,ORM框架默認其註解爲@Basic
在覈心的 Java API 中並未定義 Date 類型的精度(temporal precision). 而在數據庫中,表示 Date 類型的數據有 DATE, TIME, 和 TIMESTAMP 三種精度(即單純的日期,時間,或者二者 兼備). 在進行屬性映射時可以使用@Temporal註解來調整精度.
PS:以上內容參考@尚硅谷的PPT