我有一个包含Foo foo
的实体类Collection<Bar> bars
。我尝试了很多方法,但我无法成功更新我的收藏。
一次尝试:
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;
在Bar:
@ManyToOne(optional = false, cascade = { CascadeType.ALL })
@JoinColumn(name = "FOO_ID")
private Foo foo;
有没有其他人遇到过这个问题?有什么想法吗?
答案 0 :(得分:2)
如果您从CascadeType.ALL
移除private Foo foo
并在移除foo.getBars().clear()
后致电Bar
,则第二种方法可行。
目前,当您在第二种方法中删除Bar
时,删除会传播到相应的Foo
实体,因为CascadeType.ALL
包含CascadeType.REMOVE
。