TL; DR:是否可以配置Hibernate使用單個刪除查詢刪除所有子對象?休眠:使用一個查詢刪除所有子項
全部問題:我在休眠5.1定義了以下父/子關聯:
public class Parent {
@OneToMany(fetch = FetchType.EAGER, mappedBy = "parent", cascade = CascadeType.REMOVE)
private List<Child> children;
}
public class Child {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "parent_id", nullable = false)
private Parent parent;
}
當我刪除父對象,所有子對象被刪除,如預期,但每一個都被單獨刪除。在我的應用程序中,父母可能有成千上萬的孩子,所以出於性能方面的原因,我需要使用一個查詢來一次刪除所有孩子。
可能的解決方法
- 手動執行我自己的HQL查詢,
DELETE FROM child WHERE parent_id = ?
,刪除父之前。這裏的缺點是我(和任何其他開發人員)必須記得調用該方法。此外,它基本上繞過了級聯刪除。 - 允許級聯刪除發生在數據庫級別。由於數據在幕後發生變化,我假設我需要記住手動收集子集合以防止Hibernate和數據庫之間的差異。
編輯:我看到Hibernate老的版本中使用有one-shot delete的概念,但我無法找到最新版本的文檔中類似的事情。該功能已被刪除?
謝謝,這是有道理的。如果我在數據庫中添加級聯刪除會導致Hibernate的緩存問題? –