如何级联删除属于jpa实体的集合?
@Entitypublic class Report extends Model {
public Date date;
public double availability;
@ElementCollection
@Cascade(value={CascadeType.ALL})
public Map<FaultCategory, Integer> categories;
}
在我的一项工作中,我有以下代码:
int n = MonthlyReport.delete("date = ?", date);
这始终无法删除具有以下错误的实体:
DELETE语句与REFERENCE约束“ FK966F0D9A66DB1E54”冲突。数据库“ TFADB”的表“
dbo.MonthlyReport_categories”的列“ MonthlyReport_id”中发生了冲突。
我如何指定映射,以便在删除报告时删除category集合中的元素?
回答:
级联删除(通常是级联操作)仅在通过操作完成时有效EntityManager
。当通过JP QL /
HQL查询作为批量删除完成删除时不可以。您无法指定在ElementCollection
通过查询完成删除时将删除链接到元素的映射。
ElementCollection
注释没有层叠属性,因为操作始终是层叠的。通过删除实体时EntityManager.remove()
,操作会级联到ElementCollection
。
您必须获取MonthlyReport
要删除的所有实体,并EntityManager.remove
为每个实体调用。看起来,在Play框架中,您也可以在实体中调用delete-
method来代替它。
以上是 如何级联删除属于jpa实体的集合? 的全部内容, 来源链接: utcz.com/qa/404367.html