jpa实体未找到例外

时间:2015-04-08 14:47:14

标签: java hibernate jpa

我有以下问题: Foo类是一个带有List of Item的EntityBean。

  public class Foo {
    @OneToMany(cascade = {}, fetch = FetchType.LAZY)
    private List<Item> items = new ArrayList<Item>()

在我的申请中的某些时候,我会做以下事情:

  1. 从foo
  2. 的lsit中删除ID为3的项目
  3. 调用updateFoo()

  4. @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.
    

    祝你好运

    爱德蒙

2 个答案:

答案 0 :(得分:0)

在执行entityManager.remove之前,您应该从集合中手动删除该项目。

答案 1 :(得分:0)

我必须使双向关系,注释掉flush的调用,最后添加merge,persist并删除为cascade类型。