Spring Data Jpa (五)@Entity實例裏面經常使用註解詳解

詳細介紹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一塊兒使用。注意:能夠雙向關聯,也能夠只配置一方,須要視實際需求而定。

相關文章
相關標籤/搜索