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