我有一个实体类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/