我正在尝试删除父/子自连接实体,但无法执行此操作 这是我的映射
@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
的原因。