標籤: JPA註解java
[TOC]
數據庫
JPA經常使用的註解有 @Entity、@Table、@Id、@GeneratedValue、@Column、@Basic、@Transient、@Temporal等等。下面這幾個簡單介紹下這幾個註解。框架
@Entity 標註用於實體類聲明語句以前,指出該Java 類爲實體類,將映射到指定的數據庫表。如聲明一個實體類 Customer,它將映射到數據庫中的 customer 表上。例如:ide
@Entity public class Customer {
當實體類與其映射的數據庫表名不一樣名時須要使用 @Table 標註說明,該標註與 @Entity 標註並
列使用,置於實體類聲明語句以前,可寫於單獨語句行,也可與聲明語句同行。@Table 標註的經常使用選項是 name,用於指明數據庫的表名@Table標註還有一個兩個選項 catalog 和 schema 用於設置表所屬的數據庫目錄或模式,一般爲數據庫名。uniqueConstraints 選項用於設置約束條件,一般不須設置fetch
@Table(name="JPA_CUSTOMER") @Entity public class Customer {
@Id 標註用於聲明一個實體類的屬性映射爲數據庫的主鍵列。該屬性一般置於屬性聲明語句以前,可與聲明語句同行,也可寫在單獨行上。@Id標註也可置於屬性的getter方法以前。this
@Id public Integer getId() { return Id; } public void setId(Integer id) { Id = id; }
@GeneratedValue 用於標註主鍵的生成策略,經過 strategy 屬性指定。默認狀況下,JPA 自動選擇一個最適合底層數據庫的主鍵生成策略:SqlServer 對應 identity,MySQL 對應 auto increment。
在 javax.persistence.GenerationType 中定義瞭如下幾種可供選擇的策略:code
@GeneratedValue(strategy=GenerationType.AUTO) @Id public Integer getId() { return Id; } public void setId(Integer id) { Id = id; }
當實體的屬性與其映射的數據庫表的列不一樣名時須要使用@Column 標註說明,該屬性一般置於實體的屬性聲明語句以前,還可與 @Id 標註一塊兒使用。ci
@Column(name="LAST_NAME") public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; }
@Basic 表示一個簡單的屬性到數據庫表的字段的映射,對於沒有任何標註的 getXxxx() 方法,默認即爲@Basicrem
表示該屬性並不是一個到數據庫表的字段的映射,ORM框架將忽略該屬性.
若是一個屬性並不是數據庫表的字段映射,就務必將其標示爲@Transient,不然,ORM框架默認其註解爲@Basicget
@Transient public String customerInfo() { return "Customer [Id=" + Id + ", lastName=" + lastName + ", email=" + email + ", age=" + age + "]"; }
在覈心的 Java API 中並無定義 Date 類型的精度(temporal precision). 而在數據庫中,表示 Date 類型的數據有 DATE, TIME, 和 TIMESTAMP 三種精度(即單純的日期,時間,或者二者 兼備). 在進行屬性映射時可以使用@Temporal註解來調整精度。
@Temporal(TemporalType.TIMESTAMP) public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } @Temporal(TemporalType.DATE) public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; }