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;