我必须从父实体行中删除子实体行的集合。但是有些我的父实体也被删除了。
我看到上述问题是由于@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();
答案 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。