JPA/Hibernate - 删除子删除父(从同一个表)

Posted

技术标签:

【中文标题】JPA/Hibernate - 删除子删除父(从同一个表)【英文标题】:JPA/Hibernate - delete child removes parent (from same table) 【发布时间】:2019-03-04 04:21:27 【问题描述】:

我有一个类 Comment(见下文),其中包含一些属于父 Comment 的 Comment 对象。 到目前为止,当我删除父评论时,孩子也被删除(如预期的那样),但是当孩子被删除时问题就来了,因为父母也被删除了。 我猜这个问题来自课堂中使用的 JPA 配置。 任何想法如何在不影响父行的情况下删除子行?

 public class Comment 
   @Column  
   private String text;             

   @ManyToOne(cascade=CascadeType.ALL)
   private Comment parent;

   @OneToMany(cascade=CascadeType.ALL, mappedBy="parent")
   private Set<Comment> childs = new HashSet<Comment>();

干杯

【问题讨论】:

【参考方案1】:

parent的映射中删除cascade=CascadeType.ALL

public class Comment 
   @Column  
   private String text;             

   @ManyToOne
   private Comment parent;

   @OneToMany(cascade=CascadeType.ALL, mappedBy="parent") // or orphanRemoval=true
   private Set<Comment> childs = new HashSet<Comment>();

【讨论】:

以上是关于JPA/Hibernate - 删除子删除父(从同一个表)的主要内容,如果未能解决你的问题,请参考以下文章

在 JPA/Hibernate 中使用 @OnetoMany 的实体中不存在时从数据库中删除子记录(Spring 引导应用程序)

JPA/Hibernate 类型安全删除查询

JPA/Hibernate 级联删除不起作用

JPA 2 / Hibernate 孤儿删除仍然无法与@OneToMany 一起使用?

使用 JPA Hibernate 自动保存子对象

JPA Hibernate - 数据库和注释中的级联删除