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