您好,登錄后才能下訂單哦!
這篇文章主要介紹“jpa中無法刪除onetomany中many怎么辦”,在日常操作中,相信很多人在jpa中無法刪除onetomany中many怎么辦問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”jpa中無法刪除onetomany中many怎么辦”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
今天在做項目遇到一個問題,建立兩個實體order和orderDetail,他們是onetomany關系,當我想要之間刪除一個orderDetail時,發現不能刪除但是程序也不出錯。
實體建立模型如下圖:
order中:
orderDetail中:
1.首先我想到了直接刪除orderDetail不行,是否可以直接通過update order的關聯關系進行級聯刪除啦,于是寫了一下代碼
結果發現這樣是可以刪除orderDetail,但是這種刪除方式并不是我想要的,而且感覺也不是最好的解決方法。
2.在結合上一種方法實現成功后,突然想到是否是關聯關系建立的原因,如果我先把關聯關系斷開,在進行刪除orderDetail是否能成功:
結果證明,成功刪除
雖然實現了我想要的功能,但是jpa的刪除具體邏輯還需要深入研究。自我感覺是因為order是關系維護方,想要刪除many端就必須先斷開關系在進行刪除
在使用jpa的時候,如果有@OneToMany關系。想刪除many的單個數據。有時候刪除不了。 jap關系如下:一個用戶對應多個角色。并且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);
如果不這樣操作。就會不生效。
到此,關于“jpa中無法刪除onetomany中many怎么辦”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。