Java Persistence API定義了一種定義,可以將常規的普通Java對象(有時被稱作POJO)映射到數據庫。
這些普通Java對象被稱作Entity Bean。
除了是用Java Persistence元數據將其映射到數據庫外,Entity Bean與其他Java類沒有任何區別。
事實上,創建一個Entity Bean對象相當於新建一條記錄,刪除一個Entity Bean會同時從數據庫中刪除對應記錄,修改一個Entity Bean時,容器會自動將Entity Bean的狀態和數據庫同步。
Java Persistence API還定義了一種查詢語言(JPQL),具有與SQL相類似的特征,只不過做了裁減,以便處理Java對象而非原始的關系表。
注意:在Hibernate中也有@Entity和Table這兩個注解,但是其中@Entity注解已經廢棄,所以本文只分析JPA下的注解
解釋:
@Entity 表明該類 (UserEntity) 為一個實體類,它默認對應數據庫中的表名是user_entity。這里也可以寫成
@Entity(name = "xwj_user")
或者
@Entity
@Table(name = "xwj_user", schema = "test")
查看@Entity注解,發現其只有一個屬性name,表示其所對應的數據庫中的表名
@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
引用自 :
僅此而已-遠方
https://www.cnblogs.com/xuwenjin/p/8830850.html