【发布时间】:2011-12-11 03:32:56
【问题描述】:
感谢 JPQL 查询,我正在尝试从 MOTHER 中删除大量行。
Mother 类定义如下:
@Entity
@Table(name = "MOTHER")
public class Mother implements Serializable {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "mother",
orphanRemoval = true)
private List<Child> children;
}
@Entity
@Table(name = "CHILD")
public class Child implements Serializable {
@ManyToOne
@JoinColumn(name = "MOTHER_ID")
private Mother mother;
}
如您所见,Mother 类有“孩子”并且在执行以下查询时:
String deleteQuery = "DELETE FROM MOTHER WHERE some_condition";
entityManager.createQuery(deleteQuery).executeUpdate();
抛出异常:
ERROR - ORA-02292: integrity constraint <constraint name> violated -
child record found
当然,我可以先选择我要删除的所有对象并将它们检索到一个列表中,然后再遍历它以删除所有检索到的对象,但是这样的解决方案的性能会很糟糕!
那么有没有办法利用之前的映射来有效地删除所有Mother 对象和所有与之关联的Child 对象,而无需先编写all 的查询孩子们?
【问题讨论】: