Hibernate删除子实体行而不影响父实体行

时间:2018-06-25 19:25:41

标签: hibernate jpa spring-data-jpa

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

我看到上述问题是由于@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();

1 个答案:

答案 0 :(得分:0)

在父类中添加了以下方法

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

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

已删除的孩子在父级上使用removeChild。