關(guān)于jpa中無(wú)法刪除onetomany中many問(wèn)題的解決
jpa 無(wú)法刪除onetomany中many問(wèn)題
問(wèn)題描述
今天在做項(xiàng)目遇到一個(gè)問(wèn)題,建立兩個(gè)實(shí)體order和orderDetail,他們是onetomany關(guān)系,當(dāng)我想要之間刪除一個(gè)orderDetail時(shí),發(fā)現(xiàn)不能刪除但是程序也不出錯(cuò)。
實(shí)體建立模型如下圖:
order中:
orderDetail中:
解決思路
1.首先我想到了直接刪除orderDetail不行,是否可以直接通過(guò)update order的關(guān)聯(lián)關(guān)系進(jìn)行級(jí)聯(lián)刪除啦,于是寫(xiě)了一下代碼
結(jié)果發(fā)現(xiàn)這樣是可以刪除orderDetail,但是這種刪除方式并不是我想要的,而且感覺(jué)也不是最好的解決方法。
2.在結(jié)合上一種方法實(shí)現(xiàn)成功后,突然想到是否是關(guān)聯(lián)關(guān)系建立的原因,如果我先把關(guān)聯(lián)關(guān)系斷開(kāi),在進(jìn)行刪除orderDetail是否能成功:
結(jié)果證明,成功刪除
小結(jié)一下
雖然實(shí)現(xiàn)了我想要的功能,但是jpa的刪除具體邏輯還需要深入研究。自我感覺(jué)是因?yàn)閛rder是關(guān)系維護(hù)方,想要?jiǎng)h除many端就必須先斷開(kāi)關(guān)系在進(jìn)行刪除
jpa @OneToMany 刪除不了集合數(shù)據(jù)
在使用jpa的時(shí)候,如果有@OneToMany關(guān)系。想刪除many的單個(gè)數(shù)據(jù)。有時(shí)候刪除不了。 jap關(guān)系如下:一個(gè)用戶對(duì)應(yīng)多個(gè)角色。并且user實(shí)體中CascadeType.ALL
//user實(shí)體 @OneToMany(cascade = CascadeType.ALL,fetch= FetchType.LAZY,mappedBy = "user") private Set<Role> roles = new HashSet<Role>(); //role實(shí)體 @ManyToOne(fetch= FetchType.LAZY) @JoinColumn(name="user_id") private User user;
這時(shí)候如果想刪除role
必須做2個(gè)事情:
1、刪除role。
2、把role從集合roles中移除。
如下:
roleRepo.delete(role);//這里刪除操作需要delete和從集合中remove一起操作才能生效 user.getRoles().remove(role); userService.update(user);
如果不這樣操作。就會(huì)不生效。
參考文檔: https://stackoverflow.com/questions/2011519/jpa-onetomany-not-deleting-child
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis-plus通用查詢方法封裝的實(shí)現(xiàn)
本文主要介紹了Mybatis-plus通用查詢方法封裝的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07SpringBoot2.x 整合 thumbnailator 圖片處理的示例代碼
這篇文章主要介紹了SpringBoot2.x 之整合 thumbnailator 圖片處理,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10SpringBoot + Spring Security 基本使用及個(gè)性化登錄配置詳解
這篇文章主要介紹了SpringBoot + Spring Security 基本使用及個(gè)性化登錄配置詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Java實(shí)現(xiàn)精準(zhǔn)Excel數(shù)據(jù)排序的方法詳解
在數(shù)據(jù)處理或者數(shù)據(jù)分析的場(chǎng)景中,需要對(duì)已有的數(shù)據(jù)進(jìn)行排序,在Excel中可以通過(guò)排序功能進(jìn)行整理數(shù)據(jù),而在Java中,則可以借助Excel表格插件對(duì)數(shù)據(jù)進(jìn)行批量排序,下面我們就來(lái)學(xué)習(xí)一下常見(jiàn)的數(shù)據(jù)排序方法吧2023-10-10