Java 使用JPA更新集合时出现问题

Java 使用JPA更新集合时出现问题,java,hibernate,jpa,jakarta-ee,persistence,Java,Hibernate,Jpa,Jakarta Ee,Persistence,我有一个实体类Foo-Foo,它包含集合栏。我尝试了多种方法,但无法成功更新我的收藏 一次尝试: 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.f

我有一个实体类
Foo-Foo
,它包含
集合栏
。我尝试了多种方法,但无法成功更新我的收藏

一次尝试:

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中:


还有其他人对此有问题吗?有什么想法吗?

如果您从
private Foo Foo
中删除
CascadeType.ALL
,并在删除
Bar
s后调用
Foo.getbar().clear()
,那么第二种方法就行了


目前,当您在第二种方法中删除
Bar
s时,删除会传播到相应的
Foo
实体,因为
CascadeType。所有
都包括
CascadeType.remove

当我尝试这样做时,我得到:
javax.persistence.EntityNotFoundException:deleted entity传递给persistent:[com.Bar#]
@FarmBoy:在删除
Bar
s之后,还应该调用
foo.getbar().clear()
@OneToMany(cascade = { CascadeType.ALL }, mappedBy = "foo")
private List<Bar> bars;
@ManyToOne(optional = false, cascade = { CascadeType.ALL })
@JoinColumn(name = "FOO_ID")
private Foo foo;