猿问

子对象没有被删除

我在级联删除子对象时遇到问题。我使用 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;

}

当我尝试“DELETE FROM Parent parent WHERE parent.id in :parentIds”时,我得到了找到子对象的信息。你能给我一些建议吗?


慕哥9229398
浏览 194回答 2
2回答

HUWWW

这个问题通常发生在 OneToOne 类型的映射中,由于从父到子的外键约束,因为子实体会指向一个不存在的实体。您必须首先删除引用,通过查找实体及其映射,将引用设置为空,然后您可以合并/保留/删除它。

www说

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

相关分类

Java
我要回答