我有以下问题: Foo类是一个带有List of Item的EntityBean。
public class Foo {
@OneToMany(cascade = {}, fetch = FetchType.LAZY)
private List<Item> items = new ArrayList<Item>()
在我的申请中的某些时候,我会做以下事情:
@Override
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void updateFoo(Foo foo){
if(item has been removed from the list of foo){
//item is from the List of the parameter foo
entityManager.remove(item);
}
entityManager.flush();
//update remaining items
for(Item item: foo.getItems()){
//set some field values on item
...
entityManager.merge(item);
}
//here occurs the exception
entityManager.merge(foo);
}
在执行最后一行之前,一切正常。然后是异常
javax.persistence.EntityNotFoundException: Unable to find Item with id 3.
祝你好运
爱德蒙
答案 0 :(得分:0)
在执行entityManager.remove之前,您应该从集合中手动删除该项目。
答案 1 :(得分:0)
我必须使双向关系,注释掉flush的调用,最后添加merge,persist并删除为cascade类型。