基于Jpa中ManyToMany和OneToMany的雙向控制
Jpa ManyToMany和OneToMany的雙向控制
下面我們使用權(quán)限管理中Role<->Account(用戶ManyToMany賬號(hào))、Role<->Domain(用戶OneToMany權(quán)限域)的關(guān)系來舉例。
1、ManyToMany
Role表
Account表
在兩個(gè)表的對(duì)應(yīng)屬性上添加JoinColumns和inverseJoinColumns,并且相互交換。
JoinColumn
指定本表在中間表中的列名。inverseJoinColumns
指定受控方的列名。
在兩個(gè)類中都加上這兩個(gè)屬性,并且值互換,則能夠?qū)崿F(xiàn)雙向控制,即任何一方刪除,都會(huì)自動(dòng)刪除對(duì)應(yīng)中間表的數(shù)據(jù)。
2、OneToMany以及ManyToOne
Role表
Domain表
cascade用來指定級(jí)聯(lián)操作, cascade的值只能從CascadeType.PERSIST(級(jí)聯(lián)新建)、CascadeType.REMOVE(級(jí)聯(lián)刪除)、CascadeType.REFRESH(級(jí)聯(lián)刷新)、CascadeType.MERGE(級(jí)聯(lián)更新)中選擇一個(gè)或多個(gè)。還有一個(gè)選擇是使用CascadeType.ALL,表示選擇全部四項(xiàng)。
如果不指定Cascade,默認(rèn)是空的,那么在刪除Role的時(shí)候,只會(huì)把Domain表中的role這一列的值刪除,而該條記錄不刪除。
JoinColumn需要指定,如果不指定就會(huì)在Domain表中增加額外的一列,這一列與Domain的id一樣。經(jīng)過試驗(yàn),不指定還會(huì)造成級(jí)聯(lián)查找失敗,原因未知。
JPA中ManyToMany關(guān)系問題
配置JPA的時(shí)候多對(duì)多關(guān)系,報(bào)以下錯(cuò)誤:
org.hibernate.AnnotationException: Illegal use of mappedBy on both sides of the relationship: com.csair.gme.core.domain.ComponentType.componentPropertys
解決辦法
不能兩邊都用mappedBy,只能用一邊,而且用mappedBy的那一邊是從表,另外一邊就是主表。mappedBy=‘主表里的變量名'
問題解決!
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
一篇文章帶你了解java Object根類中關(guān)于toString,equals的方法
這篇文章主要介紹了Object類toString()和equals()方法使用解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-09-09SpringBoot集成ShedLock實(shí)現(xiàn)分布式定時(shí)任務(wù)流程詳解
ShedLock是一個(gè)鎖,官方解釋是他永遠(yuǎn)只是一個(gè)鎖,并非是一個(gè)分布式任務(wù)調(diào)度器。一般shedLock被使用的場(chǎng)景是,你有個(gè)任務(wù),你只希望他在單個(gè)節(jié)點(diǎn)執(zhí)行,而不希望他并行執(zhí)行,而且這個(gè)任務(wù)是支持重復(fù)執(zhí)行的2023-02-02深入剖析Java中的synchronized關(guān)鍵字
在 Java 程序中,我們可以利用 synchronized 關(guān)鍵字來對(duì)程序進(jìn)行加鎖,它既可以用來聲明一個(gè) synchronized 代碼塊,也可以直接標(biāo)記靜態(tài)方法或者實(shí)例方法,本文就帶大家深入了解Java中的synchronized關(guān)鍵字,感興趣的同學(xué)可以參考閱讀2023-06-06Java?20在Windows11系統(tǒng)下的簡(jiǎn)易安裝教程
這篇文章主要給大家介紹了關(guān)于Java?20在Windows11系統(tǒng)下的簡(jiǎn)易安裝教程,學(xué)習(xí)Java的同學(xué),第一步就是安裝好Java環(huán)境,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07java隨機(jī)驗(yàn)證碼生成實(shí)現(xiàn)實(shí)例代碼
這篇文章主要介紹了java隨機(jī)驗(yàn)證碼生成實(shí)現(xiàn)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05java8?Stream大數(shù)據(jù)量List分批處理切割方式
這篇文章主要介紹了java8?Stream大數(shù)據(jù)量List分批處理切割方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02