通过@RequestBody加载的实体不会在“saveOrUpdate”上保持删除其一对多关系中的项目

时间:2012-07-16 13:18:47

标签: java spring hibernate

考虑两个实体:

@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)

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>();

source