2

考虑两个实体:

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

4

1 回答 1

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

资源

于 2012-07-17T23:23:20.867 回答