gpt4 book ai didi

java - 使用 JPA 更新集合时出现问题

转载 作者:行者123 更新时间:2023-12-02 08:34:08 26 4
gpt4 key购买 nike

我有一个实体类Foo foo其中包含 Collection<Bar> bars 。我尝试了多种方法,但无法成功更新我的 Collection 。

一次尝试:

foo = em.find(key);
foo.getBars().clear();
foo.setBars(bars);
em.flush; \\ commit, etc.

这会将新集合追加到旧集合中。

另一次尝试:

foo = em.find(key);
bars = foo.getBars();
for (Bar bar : bars) {
em.remove(bar);
}
em.flush;

此时,我以为我可以添加新集合,但我发现实体 foo 已被清除。

这里有一些注释。在 Foo 中:

@OneToMany(cascade = { CascadeType.ALL }, mappedBy = "foo")
private List<Bar> bars;

在酒吧:

@ManyToOne(optional = false, cascade = { CascadeType.ALL })
@JoinColumn(name = "FOO_ID")
private Foo foo;

还有其他人遇到过这个问题吗?有什么想法吗?

最佳答案

如果您从 private Foo foo 中删除 CascadeType.ALL 并调用 foo.getBars().clear(),则第二种方法将起作用删除 Bar 后。

目前,当您在第二种方法中删除 Bar 时,删除操作会传播到相应的 Foo 实体,因为 CascadeType.ALL 包括CascadeType.REMOVE

关于java - 使用 JPA 更新集合时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2434985/

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