考虑两个实体:
@Entity
public class A implements Serializable {
...
@OneToMany(mappedBy = "a", orphanRemoval = true)
@Cascade(CascadeType.ALL)
@JsonManagedReference
private List<B> bs = new ArrayList<B>();
...
}
@Entity
public class B implements Serializable {
...
@ManyToOne
@JsonBackReference
private A a;
...
}
我正在接收A的JSON表示并通过我的一个Spring控制器中的@RequestBody加载它(在这种情况下,这是一个已经有标识符的现有实体;以下问题不适用于新实体。)
正如您所料,调用session.saveOrUpdate 不会自动删除任何不在反序列化的A.bs集合中的B(来自数据库)。 对集合执行的添加工作,以及集合中各个实体的更新。
删除这些对象的正确方法是什么?请求是否必须采用不同的结构才能实现此功能? (使用Spring 3.1.1 / Hibernate 4.0.1)
答案 0 :(得分:0)
编辑:
尝试将CascadeType.DELETE_ORPHAN添加到级联注释
@OneToMany(mappedBy = "a", orphanRemoval = true)
@Cascade(cascade = {CascadeType.ALL, CascadeType.DELETE_ORPHAN}, mappedBy = "a")
private List<B> bs = new ArrayList<B>();