JPA實體關聯關係對映之概述
一、簡介
首先來說關聯關係是面向物件分析,面向物件設計最重要的部分,JPA是完全可以通過對映來簡化資料持久化到資料,和Hibernate一樣,JPA的關聯關係也分為兩種,一種是單向關聯,一種是雙向關聯:
單向關聯:只需要單向訪問關聯端,比如說:我們只能通過某一學期訪問這學期的課程,而不能通過課程訪問課程所屬的學期,這種關聯關係就是單向關聯。
雙向關聯:關聯的兩端可以互相訪問。比說說班級可以訪問學生,學生也可以訪問班級,這種關聯關係就是雙向關聯。
關聯關係可以分為如下幾種:
單向:1-1;1-N;N-1;N-N
雙向:1-1;1-N;N-N;雙向關聯裡沒有N-1,因為雙向關係中1-N和N-1
二、關聯屬性
不管是單向關聯還是雙向關聯都需要在N的一端實體中使用@ManyToOne的註解修飾記錄關聯關係的屬性,使用ManyToOne註解常用到的屬性有:
1、Cascade:指定關聯實體採用怎樣的級聯策略,常用的屬性有四種:
(1)CascadeType.ALL:將所有的持久化操作都級聯到關聯實體
(2)CascadeType.MERGE:將merge操作都級聯到關聯實體
(3)CascadeType.PERSIST:將persist操作都級聯到關聯實體
(4)CascadeType.REFRESH:將refresh操作都級聯到關聯實體
(5)CascadeType.REMOVE:
2、fetch:指定抓取關聯實體時的抓取策略,常用的屬性有如下兩種:
(1)FetchType.EAGER:抓取實體時,立即抓取關聯實體
(2)FetchType.LAZY:抓取實體時,演示抓取關聯實體,等到真正呼叫關聯實體時再去抓取
3、TargetEntity:指定關聯實體的類名,對於大多數的關聯關係,JPA是可以通過反射來確定關聯實體的型別的,因此這個屬性不是必要的,但是也存在一些特殊情況,例如一對多,多對多,如果實體中不帶泛型資訊的Set集合來記錄關聯實體,那麼必須指定targetEntity屬性
三、對映資料庫屬性
對映實體的時候,存在N的一端,當將實體的屬性持久化到資料庫的時候,需要指定該屬性在資料庫中的各種屬性,此時用到的註解就是
1、name:指定該屬性在外來鍵列的列名
2、nullable:指定該列是否允許為空,預設是可以為空的
3、table:指定該列所在的資料表的表名,預設在多的一端實體所對映成的資料庫表中
4、unique:指定該列是否為唯一約束。
剛剛接觸瞭解的不多,關於JPA的關聯對映和這次部落格中寫到的屬性在下篇關於單雙向關聯對映的例項中在做詳細的例項。