JPA之@Entity、@Table、@Column、@Id

Java Persistence API定義了一種定義,能夠將常規的普通Java對象(有時被稱做POJO)映射到數據庫。
這些普通Java對象被稱做Entity Bean。
除了是用Java Persistence元數據將其映射到數據庫外,Entity Bean與其餘Java類沒有任何區別。
事實上,建立一個Entity Bean對象至關於新建一條記錄,刪除一個Entity Bean會同時從數據庫中刪除對應記錄,修改一個Entity Bean時,容器會自動將Entity Bean的狀態和數據庫同步。java

Java Persistence API還定義了一種查詢語言(JPQL),具備與SQL相相似的特徵,只不過作了裁減,以便處理Java對象而非原始的關係表。數據庫

注意:在Hibernate中也有@Entity和Table這兩個註解,可是其中@Entity註解已經廢棄,因此本文只分析JPA下的註解ui


首先看看個例子:spa

package com.xwj.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "xwj_user", schema = "test")
public class UserEntity {

    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    @Column(name = "ID", unique = true, nullable = false, length = 32)
    private Integer id;

    @Column(name = "last_name")
    private String lastName;

    @Column(name = "email", length = 32)
    private String email;
    
    //TODO get和set方法略...
    
}

解釋:.net

  @Entity 代表該類 (UserEntity) 爲一個實體類,它默認對應數據庫中的表名是user_entity。這裏也能夠寫成hibernate

      @Entity(name = "xwj_user")code

      或者對象

      @Entity
      @Table(name = "xwj_user", schema = "test")
blog

      查看@Entity註解,發現其只有一個屬性name,表示其所對應的數據庫中的表名get

 

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

 

若是缺省@Table註解,則class字段名即表中的字段名,因此須要@Column註解來改變class中字段名與db中表的字段名的映射規則

@Column註釋定義了將成員屬性映射到關係表中的哪一列和該列的結構信息,屬性以下:   1)name:映射的列名。如:映射tbl_user表的name列,能夠在name屬性的上面或getName方法上面加入;   2)unique:是否惟一;   3)nullable:是否容許爲空;   4)length:對於字符型列,length屬性指定列的最大字符長度;   5)insertable:是否容許插入;   6)updatetable:是否容許更新;   7)columnDefinition:定義建表時建立此列的DDL;   8)secondaryTable:從表名。若是此列不建在主表上(默認是主表),該屬性定義該列所在從表的名字

  

若是是主鍵id,還會用到@Id註解

@Id註釋指定表的主鍵,它能夠有多種生成方式:   1)TABLE:容器指定用底層的數據表確保惟一;   2)SEQUENCE:使用數據庫德SEQUENCE列萊保證惟一(Oracle數據庫經過序列來生成惟一ID);   3)IDENTITY:使用數據庫的IDENTITY列萊保證惟一;   4)AUTO:由容器挑選一個合適的方式來保證惟一;   5)NONE:容器不負責主鍵的生成,由程序來完成。

 

其中與@Id一塊兒使用的還有另外兩個註解:@GeneratedValue、@GenericGenerator,具體使用方法可參考hibernate中的@GeneratedValue與@GenericGenerator

相關文章
相關標籤/搜索