级联删除具有父子关系到同一个表的对象的故障

时间:2014-12-20 12:30:28

标签: java sql sql-server hibernate

首先,对不起我的英语。

所以,我正在使用hibernate与MS SQL Server一起工作,我遇到了一个问题。 我在我的数据库中有一个表的下一个映射:

    @Entity(name = " ... ")
    public class Entity extends BaseEntity implements Comparable {
        @Id
        @Column(name = "...")
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer id;

        @Column(name = "parent_entity_id", insertable = false, updatable = false)
        private Integer parentId;

        @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST})
        @JoinColumn(name = "parent_entity_id")
        private Entity parent;

        @OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = {CascadeType.REMOVE}, orphanRemoval = true)
        private Set<Entity> children;
    //other fields, setters, getters
}

这意味着,我的Entity个对象可以有子节点,也是Entity个对象。

所以,我的问题是我无法正确删除所有孩子的父母。当我尝试删除父,我得到一个SQL错误:

The DELETE statement conflicted with the SAME TABLE REFERENCE

那么,任何想法,如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您在parent_entity_id和id之间定义了外键。将其设置为允许级联删除:删除父级将删除其所有子级及其所有子级等。

请确保您确实希望这种情况发生!