比方說,我們有兩個實體,A和B. B有很多一對一關係提升到一個類似如下:我應該讓JPA還是數據庫級聯刪除?
@Entity
public class A {
@OneToMany(mappedBy="a_id")
private List<B> children;
}
@Entity
public class B {
private String data;
}
現在,我要刪除的目的和級聯刪除其所有孩子(B)。有兩種方法可以做到這一點:
1)將cascade=CascadeType.ALL, orphanRemoval=true
添加到OneToMany批註中,讓JPA在從數據庫中刪除A對象之前刪除所有的孩子。
2)讓類保持原樣,只是讓數據庫級聯刪除。
使用後面的選項有什麼問題嗎?它會導致實體管理器保持對已經刪除的對象的引用嗎?我選擇選項二的原因在於,選項一生成n + 1個SQL查詢以進行刪除操作,當對象A包含大量子項時可能需要很長時間,而選項二隻生成一個SQL查詢,然後繼續愉快。有沒有關於這方面的「最佳做法」?
看看我在找什麼!太糟糕了,它是供應商的具體情況,但它必須這樣做。謝謝! – 2011-04-26 14:18:00