@Entity public 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通过查询完成删除时将删除链接到元素的映射。
EntityManager
ElementCollection
ElementCollection注释没有层叠属性,因为操作始终是层叠的。通过删除实体时EntityManager.remove(),操作会级联到ElementCollection。
EntityManager.remove()
您必须获取MonthlyReport要删除的所有实体,并EntityManager.remove为每个实体调用。看起来,在Play框架中,您也可以在实体中调用delete- method来代替它。
MonthlyReport
EntityManager.remove