gpt4 book ai didi

java - 如何避免将已删除的实例传递到与 Set 的一对多关系上的合并?

转载 作者:行者123 更新时间:2023-12-02 11:05:04 25 4
gpt4 key购买 nike

我在 Hibernate 实体中有此映射。

A.java

@OneToMany(mappedBy = "a", cascade = CascadeType.ALL)
Set<B> bs;

B.java

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

我需要对 A 进行编辑。

因此,在使用 Spring @Transactional 注释的方法中加载实体之后

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

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

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

最佳答案

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

您可以根据需要在B中执行类似的操作:

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

关于java - 如何避免将已删除的实例传递到与 Set 的一对多关系上的合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51038462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com