關(guān)于jpa中無法刪除onetomany中many問題的解決
jpa 無法刪除onetomany中many問題
問題描述
今天在做項目遇到一個問題,建立兩個實體order和orderDetail,他們是onetomany關(guān)系,當我想要之間刪除一個orderDetail時,發(fā)現(xiàn)不能刪除但是程序也不出錯。
實體建立模型如下圖:
order中:

orderDetail中:

解決思路
1.首先我想到了直接刪除orderDetail不行,是否可以直接通過update order的關(guān)聯(lián)關(guān)系進行級聯(lián)刪除啦,于是寫了一下代碼

結(jié)果發(fā)現(xiàn)這樣是可以刪除orderDetail,但是這種刪除方式并不是我想要的,而且感覺也不是最好的解決方法。
2.在結(jié)合上一種方法實現(xiàn)成功后,突然想到是否是關(guān)聯(lián)關(guān)系建立的原因,如果我先把關(guān)聯(lián)關(guān)系斷開,在進行刪除orderDetail是否能成功:

結(jié)果證明,成功刪除
小結(jié)一下
雖然實現(xiàn)了我想要的功能,但是jpa的刪除具體邏輯還需要深入研究。自我感覺是因為order是關(guān)系維護方,想要刪除many端就必須先斷開關(guā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)文章
Spring Cache + Caffeine的整合與使用示例詳解
對于一些項目里需要對數(shù)據(jù)庫里的某些數(shù)據(jù)一直重復請求的,且這些數(shù)據(jù)基本是固定的,在這種情況下,可以借助簡單使用本地緩存來緩存這些數(shù)據(jù),本文介紹一下Spring Cache和Caffeine的使用,感興趣的朋友一起看看吧2023-12-12
springboot+mybatis配置clickhouse實現(xiàn)插入查詢功能
這篇文章主要介紹了springboot+mybatis配置clickhouse實現(xiàn)插入查詢功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
springboot+redis實現(xiàn)微博熱搜排行榜的示例代碼
本文主要介紹了springboot+redis實現(xiàn)微博熱搜排行榜的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05
利用Spring Social輕松搞定微信授權(quán)登錄的方法示例
這篇文章主要介紹了利用Spring Social輕松搞定微信授權(quán)登錄的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12

