我有了與其自身多對多關係的實體:如何在遞歸關係中級聯刪除?
@Entity
public class User {
@Id
private Long id;
@ManyToMany
private List<User> friends;
}
我怎麼能刪除用戶不刪除所有他的朋友?顯然,我不能使用級聯刪除。如果我嘗試刪除沒有級聯的用戶,我得到一個這樣的錯誤:「無法刪除或更新父行:外鍵約束失敗」
我有了與其自身多對多關係的實體:如何在遞歸關係中級聯刪除?
@Entity
public class User {
@Id
private Long id;
@ManyToMany
private List<User> friends;
}
我怎麼能刪除用戶不刪除所有他的朋友?顯然,我不能使用級聯刪除。如果我嘗試刪除沒有級聯的用戶,我得到一個這樣的錯誤:「無法刪除或更新父行:外鍵約束失敗」
通常用ManyToMany
我們將映射到不同表中的數據,並且刪除不會造成很大的問題。我覺得你的情況是不同的,你有自我關係。我認爲您需要使用其他方式來執行此操作。
How can I delete a user without deleting all of his friends?
下面的選項就是其中之一。
考慮到你的特殊的映射,List<User>
在User
,你應該只更新映射表引用,而不是刪除從User
表什麼。因爲他們可能有一些其他User
作爲朋友,並可能產生問題。
爲了刪除用戶,您必須從friends
所有其他用戶列表中刪除此用戶,因爲在數據庫中這些引用是外鍵。這種移除不能自動完成,即使用註釋。
聽起來不錯,我怎麼做,而不訴諸本地查詢? – Yashima
** HQL **怎麼樣?我不確定是否可以在映射中使用任何選項。 – ManuPK
HQL只比原生查詢好一點點。但我想我必須訴諸於此。現在社交網絡的問題應該更頻繁地出現。但是,然後社交數據krakens不希望刪除數據一旦收集我猜 – Yashima