【问题标题】:Hibernate delete child entity rows without impacting Parent entity rowsHibernate 删除子实体行而不影响父实体行
【发布时间】:2018-12-04 10:46:52
【问题描述】:

我必须从父实体行中删除子实体行的集合。但是有些我的父实体也被删除了。

我看到上述问题是由于@ManyToOne 关系方面的“CascadeType.ALL”。但是,如果我在 @ManyToOne 中删除这个 CascadeType.ALL,当我对也有子实体的 Parent 执行持久化时,我会遇到异常。

org.springframework.dao.InvalidDataAccessApiUsageException: 对象引用了一个未保存的瞬态实例 - 在刷新之前保存瞬态实例:

@Entity
public class Parent {
    @Id
    @Column(name = "ID")
    private Long id;

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

 ...
}

@Entity
public class Child {
    @Id
    @Column(name = "ID")
    private Long id;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="PARENTID", nullable = false)
    private Parent parent;

  ...
}

服务类:

final Parent parent = parentDao.find(parentId, status);
parent.getChilds().clear();

【问题讨论】:

    标签: hibernate jpa spring-data-jpa


    【解决方案1】:

    在父类中添加了以下方法

    public void addChild( Child child )
    {
        children.add( child );
        child.setParent( this );
    }
    
    public void removeChild( Child child )
    {
        children.remove( child );
        child.setParent( null );
    }
    

    并且删除了 Child 在 Parent 上使用 removeChild。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      相关资源
      最近更新 更多