Skip to main content
 首页 » 编程设计

java中Hibernate无法删除父/子自连接实体

2024年09月07日14sharpest

我正在尝试删除父/子自连接实体,但无法执行此操作 这是我的映射

@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; 
 
} 

请您参考如下方法:

为了正确的父/子关系建模,您应该对关系的一对多部分进行建模,请查找示例:

    @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 的原因。