首页 文章

Hibernate无法删除父/子自联接实体

提问于
浏览
1

我正在尝试删除父/子自联接实体,但无法这样做,这是我的映射

@Entity
public class FolderNode  {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "hibernate_sequence")
    @SequenceGenerator(name = "hibernate_sequence", sequenceName = "hibernate_sequence")
    @Column(name="folder_id")
    private long folderId;


    @ManyToOne
    @Cascade(CascadeType.DELETE)
    @JoinColumn(name="parent_id")
    @OnDelete(action = org.hibernate.annotations.OnDeleteAction.CASCADE)
    private FolderNode parent;

}

1 回答

  • 1

    对于正确的父/子关系建模,你应该建模关系的一对多部分,请找一个例子:

    @ManyToOne(cascade={CascadeType.ALL})
        @JoinColumn(name="parent_id")
        private Menu parent;
        @OneToMany(mappedBy="parent",orphanRemoval=true)
        private List<Menu> children = new ArrayList<Menu>();
    

    这是单向链接,因此关系的所有者将是关系的父级 . 现在,当您发出 EM.delete(parent)session.delete(parent) 时, delete 将被链级联,并且子项也将被删除(通常称为孤儿,默认情况下,hibernate不会在孤儿上发出删除语句),这就是配置 orphanRemoval = true 的原因 .

相关问题