如何避免将已删除的实例传递给与Set进行一对多关系的合并?

时间:2018-06-26 08:38:11

标签: java hibernate jpa hibernate-mapping

我在Hibernate实体中有此映射。

A.java

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "A_ID")
A a;

B.java

Spring @Transactional

我需要对A进行编辑。

因此,在使用A a = entityManager.find(A.class, a.getId); // set some new values on the instance variables of a. // take out the set of Bs through a and delete them for(B b : a.getBs()) { entityManager.remove(b); } // create new objects of B and add them to the below set- Set<B> bs = new HashSet<>(); a.setBs(bs); entityManager.merge(a); 注释的方法中加载实体后

{{1}}

上面的代码是单个方法的一部分。

我得到-传递给合并的已删除实例。 请提出建议。

1 个答案:

答案 0 :(得分:1)

您正在cascade = CascadeType.ALL类中使用B。因此,在执行entityManager.remove(b)时,删除操作是级联并删除a

您可以根据需要在B中执行以下操作:

@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST})