1. 程式人生 > >Spring Data JPA中常用的註解詳解

Spring Data JPA中常用的註解詳解

好吧!今天就來講下Spring Data JAP中的常用註解~~!先附上昨天的實體類程式碼

我們先看看類前面的兩個註解~!
@Entity

標識這個實體類是一個JPA實體,告訴JPA在程式執行的時候記得生成這個實體類所對應的表~!

@Table(name = "自定義的表名")

自定義設定這個實體類在資料庫所對應的表名!

@Id

把這個類裡面所在的變數設定為主鍵Id。

@GeneratedValue

設定主鍵的生成策略,這種方式依賴於具體的資料庫,如果資料庫不支援自增主鍵,那麼這個型別是沒法用的。

@Basic

表示一個簡單的屬性到資料庫表的欄位的對映,對於沒有任何標註的getXxxx()方法,預設 即為 @Basic fetch: 表示該屬性的讀取策略,有EAGER和LAZY兩種,分別表示主支抓取和延遲載入,預設為EAGER.

@Column(name = "自定義欄位名",length = "自定義長度",nullable = "是否可以空",unique = "是否唯一",columnDefinition = "自定義該欄位的型別和長度")

表示對這個變數所對應的欄位名進行一些個性化的設定,例如欄位的名字,欄位的長度,是否為空和是否唯一等等設定。

@Transient

表示該屬性並非一個到資料庫表的欄位的對映,ORM框架將忽略該屬性. 如果一個屬性並非資料庫表的欄位對映,就務必將其標示為 @Transient ,否則,ORM框架預設其注 解為 @Basic對於昨天實踐的註解已經解析完了啦!那麼今天為了接著對JPA表之間的各種關係的對映繼續實踐,我們再新建幾個實體類!接下來我們分別新建了
Author類,Address類和Sex列舉類來舉例完成實踐!
來我們先看看Author類



在這個類中我們使用並列舉了新的註解

@Temporal

當我們使用到java.util包中的時間日期型別,則需要@Temporal註釋來說明轉化成java.util包中的型別。其中包含三種轉化型別分別是:
java.sql.Date日期型,精確到年月日,例如“2008-08-08”
java.sql.Time時間型,精確到時分秒,例如“20:00:00”
java.sql.Timestamp時間戳,精確到納秒,例如“2008-08-08 20:00:00.000000001”

@Enumerated("需要定義存入資料庫的型別”)

使用@Enumerated對映列舉欄位,我這裡為性別建立了性別的列舉型別,而後面跟上的是存入資料庫以String型別存入。


@Embedded和@Embeddable

當一個實體類要在多個不同的實體類中進行使用,而本身又不需要獨立生成一個數據庫表,這就是需要使用@Embedded、@Embeddable的時候了。


我們在Address里加上了@Embeddable這個註解表示,Address這個類是一個可以被巢狀的類,而在Author類中,我們聲明瞭一個Address型別的變數address,然後給它加上@Embedded註解,意思是我們要在Author類巢狀Address類,當然這裡涉及到一個生命週期的問題。我們先看看生成的表再解析一下這個問題!

當被引用的物件和主物件擁有相同的生命週期的時候才考慮使用@Embedded和@Embeddable。簡單的說就是Author類存在的時候才會有Address類,當Author類不存在的時候,對應Author類所以誕生的Address類也應該是不存在的。通俗的說就是作者存在的時候才會有這個作者的地址。而不會是有一個地址存在著卻沒有人屬於這個地址。而且內嵌類會和主類生成一張表,所以內嵌類對應主類應該是要唯一的和擁有相同生命週期的。
關於@Embedded和@Embeddable這裡附上一個解析得更加詳盡的地址:http://blog.csdn.net/lmy86263/article/details/52108130
@ElementCollection

集合對映,當實體類包含多個相同型別的變數的時候就可以使用@ElementCollection來宣告這個變數,而JPA會為此生成兩個關聯的表。例如一個人有家庭住址,也有單位地址;但是“地址”並不能失去人的存在而存在,所以是一個失去獨立性的實體類;所以地址不能對映為一個實體,這時就需要對映為元件,及人的資訊裡邊包含地址。是整體與部分的關係。但由於這個地址可能有多個。比如公司地址、出生地址、家庭地址等。

興趣表
地址表