最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

對(duì)Jpa中Entity關(guān)系映射中mappedBy的全面理解

 更新時(shí)間:2021年12月06日 09:53:17   作者:ido  
這篇文章主要介紹了對(duì)Jpa中Entity關(guān)系映射中mappedBy的全面理解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

對(duì)Jpa Entity關(guān)系映射中mappedBy的理解

mappedBy 單向關(guān)系不需要設(shè)置該屬性,雙向關(guān)系必須設(shè)置,避免雙方都建立外鍵字段數(shù)據(jù)庫中1對(duì)多的關(guān)系,關(guān)聯(lián)關(guān)系總是被多方維護(hù)的即外鍵建在多方,我們?cè)趩畏綄?duì)象的@OneToMany(mappedby="")把關(guān)系的維護(hù)交給多方對(duì)象的屬性去維護(hù)關(guān)系。

對(duì)于mappedBy復(fù)習(xí)下

a) 只有OneToOne,OneToMany,ManyToMany上才有mappedBy屬性,ManyToOne不存在該屬性;

b) mappedBy標(biāo)簽一定是定義在the owned side(被擁有方的),他指向theowning side(擁有方);

c) 關(guān)系的擁有方負(fù)責(zé)關(guān)系的維護(hù),在擁有方建立外鍵。所以用到@JoinColumn

d)mappedBy跟JoinColumn/JoinTable總是處于互斥的一方

這里的維護(hù)關(guān)聯(lián)關(guān)系,拿多對(duì)多來說就是中間表,在不設(shè)置cascade的情況下,中間表由負(fù)責(zé)維護(hù)關(guān)聯(lián)關(guān)系的一方維護(hù)

舉例說明

Game 和User 兩個(gè)實(shí)體類,他們是多對(duì)多的關(guān)系,有中間表t_game-user.

在User中配置有:

@ManyToMany(mappedBy="users")
public List<Game> getGames() {
    return games;
}

Game中配置有:

@ManyToMany
@JoinTable(name = "t_game_user",
    joinColumns = {@JoinColumn(name = "game_id",referencedColumnName="gameId")},
    inverseJoinColumns = {@JoinColumn(name = "user_id",referencedColumnName="id")})
public List<User> getUsers() {
  return users;
}

所以說由Game來維護(hù)他們的關(guān)聯(lián)關(guān)系,即中間表。表現(xiàn)形式:

1.因?yàn)闆]有配置cascade所以分別給Game,User添加4條數(shù)據(jù),然后手動(dòng)在中間表中添加他們的關(guān)聯(lián)關(guān)系

2.在程序中執(zhí)行刪除User

Hibernate: delete from t_user where id=?
Hibernate: delete from t_user where id=?
Hibernate: delete from t_user where id=?
Hibernate: delete from t_user where id=?

刪除了User,并沒有對(duì)中間表發(fā)生影響

在程序中執(zhí)行刪除Game

Hibernate:delete from t_game_user where game_id=?
Hibernate:delete from t_game_user where game_id=?
Hibernate:delete from t_game_user where game_id=?
Hibernate:delete from t_game_user where game_id=?
Hibernate:delete from t_game where game_id=?
Hibernate:delete from t_game where game_id=?
Hibernate:delete from t_game where game_id=?
Hibernate:delete from t_game where game_id=?

對(duì)中間表產(chǎn)生了影響,說明是Game在維護(hù)他們之間的關(guān)聯(lián)關(guān)系

Spring-jpa中mappedBy的作用

mappedBy主要用于需要外鍵(存在于@OneToOne,@OneToMany,@ManyToMany中)的場景下,幫助我們進(jìn)行外鍵管理。

使用@JoinColumn存在的問題

在“一對(duì)多”的場景下,如果不使用mappedby,則一般是在“一方”和“多方”分別使用@joinColumn注解,幫助我們?cè)凇岸喾健焙汀耙环健边M(jìn)行外鍵的維護(hù),這樣做的好處去掉多出來的一張關(guān)系映射表。

但是這會(huì)產(chǎn)生一個(gè)問題,就是執(zhí)行的時(shí)候因?yàn)閮煞蕉家S護(hù)外鍵,所以在進(jìn)行數(shù)據(jù)的增刪時(shí)會(huì)執(zhí)行冗余的update語句(update”多方“的外鍵),這些update語句是沒有必要的。

因此,問題的解決就是需要我們只在“多方”來維護(hù)外鍵,為什么不在“一方'維護(hù)外鍵,因?yàn)檫@樣”一方“為了維護(hù)外鍵還是會(huì)執(zhí)行多余的update語句。

使用mappedBy

所以,我們需要在@OneToMany上使用mappedBy,值一般設(shè)為“多方”Entity類的外鍵數(shù)據(jù)成員名(注意不是數(shù)據(jù)庫上的字段名,同時(shí)必須去掉@JoinColumn,不然會(huì)產(chǎn)生沖突)。這樣就將外鍵的維護(hù)權(quán)交給“多方”,多方還是要使用@JoinColumn,并將值設(shè)為外鍵字段名,不然系統(tǒng)會(huì)自動(dòng)幫我們?cè)O(shè)置一個(gè)外鍵字段。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mybatis-plus(insertBatchSomeColumn批量添加方式)

    mybatis-plus(insertBatchSomeColumn批量添加方式)

    這篇文章主要介紹了mybatis-plus(insertBatchSomeColumn批量添加方式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java源碼角度分析HashMap用法

    Java源碼角度分析HashMap用法

    這篇文章主要介紹了Java源碼角度分析HashMap用法,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • java實(shí)現(xiàn)優(yōu)酷視頻地址解析示例代碼分享

    java實(shí)現(xiàn)優(yōu)酷視頻地址解析示例代碼分享

    最近做了一個(gè)在線視頻的下載器,需要解析youku的視頻,獲得真正的視頻地址,現(xiàn)在把解析過程記錄下來以供參考
    2014-01-01
  • Spring Boot實(shí)戰(zhàn)之模板引擎

    Spring Boot實(shí)戰(zhàn)之模板引擎

    這篇文章主要介紹了Spring Boot實(shí)戰(zhàn)之模板引擎,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • 淺談Java源碼ConcurrentHashMap

    淺談Java源碼ConcurrentHashMap

    最近剛?cè)腴Tjava,覺得看源碼挺有意思的,就記錄一下一些常用類的源碼吧,從而能夠總結(jié)一些使用細(xì)節(jié).本文對(duì)源碼ConcurrentHashMap介紹的非常詳細(xì),對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Java中的幾種讀取properties配置文件的方式

    Java中的幾種讀取properties配置文件的方式

    這篇文章主要介紹了Java中的幾種讀取properties配置文件的方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • IntelliJ IDEA2019 安裝lombok的實(shí)現(xiàn)

    IntelliJ IDEA2019 安裝lombok的實(shí)現(xiàn)

    這篇文章主要介紹了IntelliJ IDEA2019 安裝lombok的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 利用Java實(shí)現(xiàn)mTLS調(diào)用

    利用Java實(shí)現(xiàn)mTLS調(diào)用

    這篇文章主要介紹使用 Java作為客戶端 與受 mTLS 保護(hù)的服務(wù)交互。為了對(duì)我們的 Java 客戶端進(jìn)行 ssl 配置,我們需要先設(shè)置一個(gè) SSLContext。這簡化了事情,因?yàn)?SSLContext 可用于各種 http 客戶端,接下來我們一起進(jìn)入下面文章了解具體內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • Spring循環(huán)依賴的解決方法詳解

    Spring循環(huán)依賴的解決方法詳解

    Spring的解決循環(huán)依賴是有前置條件的,要解決循環(huán)依賴我們首先要了解Spring Bean對(duì)象的創(chuàng)建過程和依賴注入的方式。依賴注入方式,我之前的博客有所分享,大家可以在看本篇文章之前進(jìn)行一下小小的回顧
    2022-08-08
  • java 8 lambda表達(dá)式list操作分組、過濾、求和、最值、排序、去重代碼詳解

    java 8 lambda表達(dá)式list操作分組、過濾、求和、最值、排序、去重代碼詳解

    java8的lambda表達(dá)式提供了一些方便list操作的方法,主要涵蓋分組、過濾、求和、最值、排序、去重,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01

最新評(píng)論

峨眉山市| 噶尔县| 峨眉山市| 永川市| 新郑市| 衡东县| 昌平区| 沙雅县| 大厂| 绵竹市| 巢湖市| 双辽市| 凤台县| 太康县| 平武县| 贵港市| 天津市| 平定县| 泸西县| 岱山县| 焦作市| 化德县| 孟州市| 固阳县| 舒城县| 玉田县| 平定县| 泸西县| 奉新县| 怀化市| 余姚市| 海宁市| 天水市| 贵南县| 微博| 开鲁县| 水富县| 贵阳市| 诸暨市| 视频| 郯城县|