使用JPA更新集合的问题

时间:2010-03-12 18:44:04

标签: java hibernate jpa java-ee persistence

我有一个包含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;

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

1 个答案:

答案 0 :(得分:2)

如果您从CascadeType.ALL移除private Foo foo并在移除foo.getBars().clear()后致电Bar,则第二种方法可行。

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