JPA(二) JPA 註解

JPA(二) JPA 註解

標籤: JPA註解java


[TOC]數據庫

JPA經常使用的註解有 @Entity、@Table、@Id、@GeneratedValue、@Column、@Basic、@Transient、@Temporal等等。下面這幾個簡單介紹下這幾個註解。框架

@Entity

@Entity 標註用於實體類聲明語句以前,指出該Java 類爲實體類,將映射到指定的數據庫表。如聲明一個實體類 Customer,它將映射到數據庫中的 customer 表上。例如:ide

@Entity
public class Customer {

@Table

當實體類與其映射的數據庫表名不一樣名時須要使用 @Table 標註說明,該標註與 @Entity 標註並
列使用,置於實體類聲明語句以前,可寫於單獨語句行,也可與聲明語句同行。@Table 標註的經常使用選項是 name,用於指明數據庫的表名@Table標註還有一個兩個選項 catalog 和 schema 用於設置表所屬的數據庫目錄或模式,一般爲數據庫名。uniqueConstraints 選項用於設置約束條件,一般不須設置fetch

@Table(name="JPA_CUSTOMER")
@Entity
public class Customer {

@Id

@Id 標註用於聲明一個實體類的屬性映射爲數據庫的主鍵列。該屬性一般置於屬性聲明語句以前,可與聲明語句同行,也可寫在單獨行上。@Id標註也可置於屬性的getter方法以前。this

@Id
  public Integer getId() {
    return Id;
  }
  public void setId(Integer id) {
    Id = id;
  }

@GeneratedValue

@GeneratedValue 用於標註主鍵的生成策略,經過 strategy 屬性指定。默認狀況下,JPA 自動選擇一個最適合底層數據庫的主鍵生成策略:SqlServer 對應 identity,MySQL 對應 auto increment。
在 javax.persistence.GenerationType 中定義瞭如下幾種可供選擇的策略:code

  • IDENTITY:採用數據庫 ID自增加的方式來自增主鍵字段,Oracle 不支持這種方式;
  • AUTO: JPA自動選擇合適的策略,是默認選項;
  • SEQUENCE:經過序列產生主鍵,經過 @SequenceGenerator 註解指定序列名,MySql 不支持這種方式
  • TABLE:經過表產生主鍵,框架藉由表模擬序列產生主鍵,使用該策略可使應用更易於數據庫移植。
@GeneratedValue(strategy=GenerationType.AUTO)
  @Id
  public Integer getId() {
    return Id;
  }
  public void setId(Integer id) {
    Id = id;
  }

@Column

當實體的屬性與其映射的數據庫表的列不一樣名時須要使用@Column 標註說明,該屬性一般置於實體的屬性聲明語句以前,還可與 @Id 標註一塊兒使用。ci

  • @Column 標註的經常使用屬性是 name,用於設置映射數據庫表的列名。此外,該標註還包含其它多個屬性,如:unique 、nullable、length 等。
  • @Column 標註的 columnDefinition 屬性: 表示該字段在數據庫中的實際類型.一般 ORM 框架能夠根據屬性類型自動判斷數據庫中字段的類型,可是對於Date類型仍沒法肯定數據庫中字段類型到底是DATE,TIME仍是TIMESTAMP.此外,String的默認映射類型爲VARCHAR, 若是要將 String 類型映射到特定數據庫的 BLOB 或TEXT 字段類型.
  • @Column標註也可置於屬性的getter方法以前
@Column(name="LAST_NAME")
  public String getLastName() {
    return lastName;
  }
  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

@Basic

@Basic 表示一個簡單的屬性到數據庫表的字段的映射,對於沒有任何標註的 getXxxx() 方法,默認即爲@Basicrem

  • fetch: 表示該屬性的讀取策略,有 EAGER 和 LAZY 兩種,分別表示主支抓取和延遲加載,默認爲 EAGER.
  • optional:表示該屬性是否容許爲null, 默認爲true

@Transient

表示該屬性並不是一個到數據庫表的字段的映射,ORM框架將忽略該屬性.
若是一個屬性並不是數據庫表的字段映射,就務必將其標示爲@Transient,不然,ORM框架默認其註解爲@Basicget

@Transient
    public String customerInfo() {
        return "Customer [Id=" + Id + ", lastName=" + lastName + ", email="
                + email + ", age=" + age + "]";
    }

@Temporal

在覈心的 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;
    }
相關文章
相關標籤/搜索