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

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

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

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

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

對于mappedBy復習下

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

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

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

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

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

舉例說明

Game 和User 兩個實體類,他們是多對多的關(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來維護他們的關(guān)聯(lián)關(guān)系,即中間表。表現(xiàn)形式:

1.因為沒有配置cascade所以分別給Game,User添加4條數(shù)據(jù),然后手動在中間表中添加他們的關(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,并沒有對中間表發(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=?

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

Spring-jpa中mappedBy的作用

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

使用@JoinColumn存在的問題

在“一對多”的場景下,如果不使用mappedby,則一般是在“一方”和“多方”分別使用@joinColumn注解,幫助我們在“多方”和“一方”進行外鍵的維護,這樣做的好處去掉多出來的一張關(guān)系映射表。

但是這會產(chǎn)生一個問題,就是執(zhí)行的時候因為兩方都要維護外鍵,所以在進行數(shù)據(jù)的增刪時會執(zhí)行冗余的update語句(update”多方“的外鍵),這些update語句是沒有必要的。

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

使用mappedBy

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

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

相關(guān)文章

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

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

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

    Java源碼角度分析HashMap用法

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

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

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

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

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

    淺談Java源碼ConcurrentHashMap

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

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

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

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

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

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

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

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

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

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

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

最新評論

咸阳市| 攀枝花市| 义乌市| 焦作市| 鹰潭市| 福建省| 平潭县| 临海市| 井陉县| 白银市| 山东| 荣昌县| 高密市| 长宁区| 敖汉旗| 芒康县| 桂阳县| 龙州县| 克山县| 延长县| 湟源县| 泰顺县| 格尔木市| 靖远县| 博野县| 乌兰县| 理塘县| 灵寿县| 郑州市| 蚌埠市| 阳春市| 丰台区| 通州市| 保康县| 静安区| 醴陵市| 肇州县| 潍坊市| 佛山市| 闻喜县| 建德市|