好吧找岖!今天就來講下Spring Data JAP中的常用注解~~!先附上昨天的實體類代碼芥牌!
我們先看看類前面的兩個注解~!
@Entity
標識這個實體類是一個JPA實體峦椰,告訴JPA在程序運行的時候記得生成這個實體類所對應的表~失仁!
@Table(name = "自定義的表名")
自定義設置這個實體類在數(shù)據(jù)庫所對應的表名!
@Id
把這個類里面所在的變量設置為主鍵Id们何。
@GeneratedValue
設置主鍵的生成策略萄焦,這種方式依賴于具體的數(shù)據(jù)庫,如果數(shù)據(jù)庫不支持自增主鍵冤竹,那么這個類型是沒法用的拂封。
@Basic
表示一個簡單的屬性到數(shù)據(jù)庫表的字段的映射,對于沒有任何標注的getXxxx()方法,默認 即為 @Basic fetch: 表示該屬性的讀取策略,有EAGER和LAZY兩種,分別表示主支抓取和延遲加載,默認為EAGER.
@Column(name = "自定義字段名",length = "自定義長度"鹦蠕,nullable = "是否可以空"冒签,unique = "是否唯一",columnDefinition = "自定義該字段的類型和長度")
表示對這個變量所對應的字段名進行一些個性化的設置钟病,例如字段的名字萧恕,字段的長度,是否為空和是否唯一等等設置肠阱。
@Transient
表示該屬性并非一個到數(shù)據(jù)庫表的字段的映射,ORM框架將忽略該屬性. 如果一個屬性并非數(shù)據(jù)庫表的字段映射,就務必將其標示為 @Transient ,否則,ORM框架默認其注 解為 @Basic對于昨天實踐的注解已經(jīng)解析完了啦票唆!那么今天為了接著對JPA表之間的各種關系的映射繼續(xù)實踐,我們再新建幾個實體類屹徘!接下來我們分別新建了
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("需要定義存入數(shù)據(jù)庫的類型”)
使用@Enumerated映射枚舉字段,我這里為性別建立了性別的枚舉類型肆糕,而后面跟上的是存入數(shù)據(jù)庫以String類型存入般堆。
@Embedded和@Embeddable
當一個實體類要在多個不同的實體類中進行使用在孝,而本身又不需要獨立生成一個數(shù)據(jù)庫表诚啃,這就是需要使用@Embedded、@Embeddable的時候了私沮。
我們在Address里加上了@Embeddable這個注解表示始赎,Address這個類是一個可以被嵌套的類,而在Author類中,我們聲明了一個Address類型的變量address造垛,然后給它加上@Embedded注解魔招,意思是我們要在Author類嵌套Address類,當然這里涉及到一個生命周期的問題五辽。我們先看看生成的表再解析一下這個問題办斑!
當被引用的對象和主對象擁有相同的生命周期的時候才考慮使用@Embedded和@Embeddable。簡單的說就是Author類存在的時候才會有Address類杆逗,當Author類不存在的時候乡翅,對應Author類所以誕生的Address類也應該是不存在的。通俗的說就是作者存在的時候才會有這個作者的地址罪郊。而不會是有一個地址存在著卻沒有人屬于這個地址蠕蚜。而且內(nèi)嵌類會和主類生成一張表,所以內(nèi)嵌類對應主類應該是要唯一的和擁有相同生命周期的悔橄。
關于@Embedded和@Embeddable這里附上一個解析得更加詳盡的地址:http://blog.csdn.net/lmy86263/article/details/52108130
@ElementCollection
集合映射靶累,當實體類包含多個相同類型的變量的時候就可以使用@ElementCollection來聲明這個變量,而JPA會為此生成兩個關聯(lián)的表癣疟。例如一個人有家庭住址挣柬,也有單位地址;但是“地址”并不能失去人的存在而存在睛挚,所以是一個失去獨立性的實體類凛忿;所以地址不能映射為一個實體,這時就需要映射為組件竞川,及人的信息里邊包含地址店溢。是整體與部分的關系。但由于這個地址可能有多個委乌。比如公司地址床牧、出生地址、家庭地址等遭贸。