比方说,我们有两个实体,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