2010-03-12 67 views
0

我有一个包含Collection<Bar> bars的实体类Foo foo。我尝试了各种方法,但我无法成功更新我的收藏。使用JPA更新集合问题

一个尝试:

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已经被消灭了。

以下是一些注释。 在富:

@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和删除Bar年代后调用foo.getBars().clear()

回答

2

第二种方法是有效的。

目前,当你在你的第二个方法删除Bar S,去除传播到相应的Foo实体,因为CascadeType.ALL包括CascadeType.REMOVE

+0

当我尝试,我得到: 'javax.persistence.EntityNotFoundException:[com.Bar#]' – 2010-03-12 19:04:43

+0

@FarmBoy::通过坚持删除的实体还应当调用'foo.getBars()清( )''删除'酒吧'后。 – axtavt 2010-03-12 19:07:11

+0

它现在有效,非常感谢。 – 2010-03-12 19:18:52