實體與實體之間的關聯關係一共分為四種,分別為onetoone、onetomany、manytoone 和 manytomany;而實體之間的關聯關係又分為雙向的和單向的。實體之間的關聯關係是在 jpa 使用中最容易發生問題的地方。
@entity
@data
@builder
@allargsconstructor
@noargsconstructor
public
class
user
user 實體裡面什麼都沒變化,不需要新增 @onetoone 註解。我們只需要在擁有外來鍵的一方配置就可以,所以 userinfo 的**如下:
@entity
@data
@builder
@allargsconstructor
@noargsconstructor
@tostring
(exclude =
"user"
)public
class
userinfo
上面試單項關聯關係,那麼雙向關聯應該怎麼配置呢?我們保持 userinfo 不變,在 user 實體物件裡面新增這一段**即可。
@onetoone
"user"
)private userinfo userinfo;
@inte***ce onetoone 原始碼解讀
public @inte***ce
onetoone
;//資料獲取方式eager(立即載入)/lazy(延遲載入)
fetchtype fetch()
default eager;
//是否允許為空,預設是可選的,也就表示可以為空;
boolean
optional()
default
true
;//關聯關係被誰維護的一方物件裡面的屬性名字。 雙向關聯的時候必填()
default"";
//當被標識的字段發生刪除或者置空操作之後,是否同步到關聯關係的一方,即進行通過刪除操作,預設flase,注意與cascadetype.remove 級聯刪除的區別
boolean
orphanremoval()
default
false
;}
cascadetype用法
在 cascadetype 的用法中,cascadetype 的列舉值只有五個,分別如下:
1、cascadetype.persist 級聯新建orphanremoval 屬性用法2、cascadetype.remove 級聯刪除
3、cascadetype.refresh 級聯重新整理
4、cascadetype.merge 級聯更新
5、cascadetype.all 四項全選
jpa 2.0 還新增了 cascadetype.detach,即級聯實體到 detach 狀態。
orphanremoval 表示當關聯關係被刪除的時候,是否應用級聯刪除,預設 false。
public @inte***ce
manytoone
; fetchtype fetch()
default eager;
boolean
optional()
default
true;}
public @inte***ce
onetomany
;//資料獲取方式eager(立即載入)/lazy(延遲載入)
fetchtype fetch()
default lazy;
//關係被誰維護,單項的。注意:只有關係維護方才能操作兩者的關係。()
default"";
//是否級聯刪除。和cascadetype.remove的效果一樣。兩種配置了乙個就會自動級聯刪除
boolean
orphanremoval()
default
false
;}
我們看到上面的字段和 @onetoone 裡面的基本一樣,用法是一樣的,不過需要注意以下幾點:
@manytoone 的 lazy 機制和用法,與 @onetoone 的一樣,@manytoone 和 @onetomany 的最佳實踐,與 @onetoone 的完全一樣,也是盡量避免雙向關聯,一切級聯更新和 orphanremoval 都保持預設規則,並且 fetch 採用 lazy 延遲載入。
@manytomany 代表多對多的關聯關係,這種關聯關係任何一方都可以維護關聯關係。當用到 @manytomany 的時候一定是三張表,不要想著建兩張表,兩張表肯定是違背表的設計原則的。
那麼我們看下 @manytomany 的語法。
public @inte***ce
manytomany
; fetchtype fetch()
default lazy;()
default"";
}
基本上和其他的相同,@onetomany 的最佳實踐同樣適用,一般是在中間表物件裡面做單向關聯,這樣會讓實體之間的關聯關係簡單很多。
與 @onetomany 一樣的道理,不要用級聯刪除和 orphanremoval=true。
fetchtype 採用預設方式:fetch = fetchtype.lazy 的方式。
Spring Data JPA實踐與學習(四)
spring data jpa 為了方便我們排序和分頁,支援了兩個特殊型別的引數 sort 和 pageable。sort 在查詢的時候可以實現動態排序,我們看下其原始碼 public sort direction direction,string.properties sort 裡面決定了我們哪些...
spring data jpa實體繼承
spring jpa中我們要將sql對映到物件,尤其是在spring boot這種高度自動化的環境下使用,大量的最優目錄結構與命名規則可以大大降低配置,約定大於配置貫穿其中。例如我們定義查詢dao,繼承jparepository即可。然後返回的物件,我們可以定義model entity table ...
SpringData JPA分頁查詢
首先我們需要知道springdata jpa 的幾個介面 其實看名字就大概懂了,也可以很方便的使用 首先我們的持久化層繼承jparepository,相當於繼承了增刪改查的持久化層以及分頁查詢的持久化層 所以如果我們要使用分頁查詢 我們只需要直接呼叫 由一開始的圖也可以看到pageable的其中乙個...