如何级联删除属于jpa实体的集合?

发布于 2021-02-01 12:32:57

@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集合中的元素?

关注者
0
被浏览
62
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    级联删除(通常是级联操作)仅在通过操作完成时有效EntityManager。当通过JP QL /
    HQL查询作为批量删除完成删除时不可以。您无法指定在ElementCollection通过查询完成删除时将删除链接到元素的映射。

    ElementCollection注释没有层叠属性,因为操作始终是层叠的。通过删除实体时EntityManager.remove(),操作会级联到ElementCollection

    您必须获取MonthlyReport要删除的所有实体,并EntityManager.remove为每个实体调用。看起来,在Play框架中,您也可以在实体中调用delete-
    method来代替它。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看