考虑两个实体:
@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)