假设我们有两个实体,A 和 B。B 与 A 具有多对一的关系,如下所示:
@Entity
public class A {
@OneToMany(mappedBy="a_id")
private List<B> children;
}
@Entity
public class B {
private String data;
}
现在,我想删除该A
对象并将删除级联到它的所有 children B
。有两种方法可以做到这一点:
添加
cascade=CascadeType.ALL, orphanRemoval=true
到 OneToMany 注释,让 JPA 在从数据库中删除 A 对象之前删除所有子项。让类保持原样,让数据库级联删除。
使用后一个选项有什么问题吗?它会导致实体管理器保留对已删除对象的引用吗?我选择选项二而不是选项一的原因是选项一生成 n+1 个 SQL 查询以进行删除,当对象 A 包含很多子项时,这可能需要很长时间,而选项二仅生成一个 SQL 查询然后继续高兴地。有没有关于这个的“最佳实践”?