子对象未删除

时间:2018-10-26 08:15:09

标签: java eclipselink jpql

我对级联删除子对象有问题。我使用EclipseLink。 当父表中的主键也是子表中的主键时,一对一关系的映射。

 class Parent {
    @Column(name = "PARENT_ID", unique = true, nullable = false)
    private Long id;

    @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "parent")
    private Child child;

}

class Child {
    @Id
    @JoinColumn(name = "PARENT_ID", unique = true)
    private Parent childId;
}

当我尝试“在:parentIds中从父级父代WHERE parent.id中删除”时,我得到有关找到子对象的信息。你能给我一些建议吗?

2 个答案:

答案 0 :(得分:2)

由于从父级到子级的外键约束,此问题通常在OneToOne类型的映射中发生,因为子级实体将指向不存在的实体。您必须首先通过找到实体及其映射来摆脱引用,将引用设置为null,然后才能合并/持久性/删除引用。

这里提出了类似的问题,请从这里寻求帮助: JPA orphan removal does not work for OneToOne relations

答案 1 :(得分:1)

JPQL批量更新和删除不会将对象加载到内存中,因此您有责任自己删除或修复任何引用。在这种情况下,您需要先进行批量删除以清除子项,然后才能删除其父项。