詳細介紹javax.persistence下面的Entity中經常使用的註解。java
雖然Spring Data JPA已經幫咱們對數據的操做封裝得很好了,約定大於配置思想,幫咱們默認了不少東西。JPA(Java持久性API)是存儲業務實體關聯的實體來源。它顯示瞭如何定義一個面向普通Java對象(POJO)做爲一個實體,以及如何與管理關係實體提供一套標準。所以,javax.persistence下面的有些註解仍是必需要去了解的,以便於更好地提升工做效率。算法
1.基本註解sql
基本註解包括@Entity、@Table、@Id、@IdClass、@GeneratedValue、@Basic、@Transient、@Column、@Temporal、@Enumerated、@Lob數據庫
1.1@Entityfetch
@Entity定義對象將會成爲被JPA管理的實體,將映射到指定的數據庫表。優化
1.2@Table對象
@Table指定數據庫的表名。blog
1.3@Id接口
@Id定義屬性爲數據庫的主鍵,一個實體裏面必須有一個。內存
1.4@IdClass
@IdClass利用外部類的聯合主鍵。
做爲符合主鍵類,要知足如下幾點要求。
必須實現Serializable接口。
必須有默認的public無參數的構造方法。
必須覆蓋equals和hashCode方法。equals方法用於判斷兩個對象是否相同,EntityManger經過find方法來查找Entity時是根據equals的返回值來判斷的。在本例中,只有對象的name和email值徹底相同或同一個對象時才返回true,不然返回false。hashCode方法返回當前對象的哈希碼,生成的hashCode相同的機率越小越好,算法能夠進行優化
1.5 @GeneratedValue
@GeneratedValue爲主鍵生成策略
GenerationType一共有如下4個值:
1.6 @Basic
@Basic表示屬性是到數據庫表的字段的映射。若是實體的字段上沒有任何註解,默認即爲@Basic。
1.7 @Transient
@Transient表示該屬性並不是一個到數據庫表的字段的映射,表示非持久化屬性,與@Basic做用相反。JPA映射數據庫的時候忽略它。
1.8 @Column
@Column定義該屬性對應數據庫中的列名
1.9@Temporal
@Temporal用來設置Date類型的屬性映射到對應精度的字段。
(1)@Temporal(TemporalType.DATE)映射爲日期∥date(只有日期)
(2)@Temporal(TemporalType.TIME)映射爲日期∥time(只有時間)。
(3)@Temporal(TemporalType.TIMESTAMP)映射爲日期∥datetime(日期+時間)。
1.10@Enumerated
直接映射enum枚舉類型的字段
1.11@Lob
@Lob 將屬性映射成數據庫支持的大對象類型,支持如下兩種數據庫類型的字段。
(1)Clob(Character Large Ojects)類型是長字符串類型,java.sql.Clob、Character[]、char[]和String將被映射爲Clob類型。
(2)Blob(Binary Large Objects)類型是字節類型,java.sql.Blob、Byte[]、byte[]和實現了Serializable接口的類型將被映射爲Blob類型。
(3)Clob、Blob佔用內存空間較大,通常配合@Basic(fetch=FetchType.LAZY)將其設置爲延遲加載。
2.關聯關係註解
關聯關係註解包括@JoinColumn、@OneToOne、@OneToMany、@ManyToOne、@ManyToMany、@JoinTable、@OrderBy。
2.1 @JoinColumn定義外鍵關聯的字段名稱
用法:@JoinColumn主要配合@OneToOne、@ManyToOne、@OneToMany一塊兒使用,單獨使用沒有意義。
@JoinColumns定義多個字段的關聯關係。
2.2 @OneToOne關聯關係
用法:@OneToOne須要配合@JoinColumn一塊兒使用。注意:能夠雙向關聯,也能夠只配置一方,須要視實際需求而定。