2010-03-12 68 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