亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

對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復(fù)習(xí)下

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

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

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

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

這里的維護關(guān)聯(lián)關(guān)系,拿多對多來說就是中間表,在不設(shè)置cascade的情況下,中間表由負責(zé)維護關(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)文章

  • java實現(xiàn)線性表及其算法

    java實現(xiàn)線性表及其算法

    線性表是最簡單和最常用的一種數(shù)據(jù)結(jié)構(gòu),它是有n個體數(shù)據(jù)元素(節(jié)點)組成的有限序列,這篇文章主要介紹了java實現(xiàn)線性表及其算法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • 新手初學(xué)Java-Map

    新手初學(xué)Java-Map

    Map簡介:將鍵映射到值的對象。一個映射不能包含重復(fù)的鍵;每個鍵最多只能映射到一個值。此接口取代 Dictionary 類,后者完全是一個抽象類,而不是一個接口
    2021-07-07
  • Java 數(shù)據(jù)結(jié)構(gòu)七大排序使用分析

    Java 數(shù)據(jù)結(jié)構(gòu)七大排序使用分析

    這篇文章主要介紹了Java常用的排序算法及代碼實現(xiàn),在Java開發(fā)中,對排序的應(yīng)用需要熟練的掌握,這樣才能夠確保Java學(xué)習(xí)時候能夠有扎實的基礎(chǔ)能力。那Java有哪些排序算法呢?本文小編就來詳細說說Java常見的排序算法,需要的朋友可以參考一下
    2022-04-04
  • springcloud?整合?openfeign的方法

    springcloud?整合?openfeign的方法

    openFeign 是springcloud對Feign進行了增強,使得Feign支持了springmvc的注解,并整合了Ribbon和Eureka,從而讓Feign的使用更加方便,這篇文章主要介紹了springcloud?整合?openfeign,需要的朋友可以參考下
    2022-09-09
  • Vue.Js及Java實現(xiàn)文件分片上傳代碼實例

    Vue.Js及Java實現(xiàn)文件分片上傳代碼實例

    這篇文章主要介紹了Vue.Js及Java實現(xiàn)文件分片上傳代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • SpringBoot 項目中的圖片處理策略之本地存儲與路徑映射

    SpringBoot 項目中的圖片處理策略之本地存儲與路徑映射

    在SpringBoot項目中,靜態(tài)資源存放在static目錄下,使得前端可以通過URL來訪問這些資源,我們就需要將文件系統(tǒng)的文件路徑與URL建立一個映射關(guān)系,把文件系統(tǒng)中的文件當成我們的靜態(tài)資源即可,本文給大家介紹SpringBoot本地存儲與路徑映射的相關(guān)知識,感興趣的朋友一起看看吧
    2023-12-12
  • Java PDF 添加數(shù)字簽名的實現(xiàn)方法

    Java PDF 添加數(shù)字簽名的實現(xiàn)方法

    這篇文章主要介紹了Java PDF 添加數(shù)字簽名的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Spring?Boot讀取配置文件內(nèi)容的3種方式(@Value、Environment和@ConfigurationProperties)

    Spring?Boot讀取配置文件內(nèi)容的3種方式(@Value、Environment和@ConfigurationP

    工作中經(jīng)常會有一些參數(shù)需要配置,同時在代碼里面需要用到,所有就需要配置類讀取,然后在使用的時候注入該類進行獲取相關(guān)參數(shù),下面這篇文章主要給大家介紹了關(guān)于Spring?Boot讀取配置文件內(nèi)容的3種方式,需要的朋友可以參考下
    2023-01-01
  • mybatis-plus多表聯(lián)查join的實現(xiàn)

    mybatis-plus多表聯(lián)查join的實現(xiàn)

    本文主要介紹了mybatis-plus多表聯(lián)查join的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Java讀取制表符文本轉(zhuǎn)換為JSON實現(xiàn)實例

    Java讀取制表符文本轉(zhuǎn)換為JSON實現(xiàn)實例

    在Java開發(fā)中,處理各種數(shù)據(jù)格式是常見的任務(wù),本文將介紹如何使用Java讀取制表符文本文件,并將其轉(zhuǎn)換為JSON格式,以便于后續(xù)的數(shù)據(jù)處理和分析,我們將使用Java中的相關(guān)庫來實現(xiàn)這個過程,并提供詳細的代碼示例
    2024-01-01

最新評論