Spring JPA -实体分离?在异常



我不确定我是否问对了,但我有一个事务性的方法,在这个方法中我获取了一个项目列表。现在,在处理其中一个项目时,我遇到了一个无效的数据使用异常[null被传递给存储库,fine one抛出这个异常,这是fine],在获得该异常时,我捕获它,并将正在处理的项目标记为"失败"。事务性方法结束,但更改没有完成。

@Transactional
public void method(){    
  try{
    List items = itemRepo.getItems(NOT_SUBMITTED);
    for(Item item: items){
      processItem(item); //this is where the exception happens
    }
  }
  catch(Exception e){
    item.setStatus(FAILED) // this doesn't go through to the db
  }
}
private void processItem(Item item){
  otherRepo.findOne(item.X); //item.X is null, and I get "invalid data usage" exception
}

我认为这个物体正在脱离;不知道为什么。我做了一个测试抛出一个异常自己在尝试块,工作完美。这一状况得到了适当的反映。

我试着抓住这个对象再次做itemRepo.findOne(item). setstate (FAILED),没有工作。我试过了,itemRepo.save(item) -没有工作。

指针吗?

谢谢

该异常由JPA实现抛出,该实现还将事务状态设置为setRollbackOnly。这就是为什么当你抛出异常时,你可以保存失败状态。

一旦JPA entityManager抛出异常,它就完成了,您就不能再使用该entityManager了。将项目状态保存为失败必须在使用不同的entityManager实例的单独事务中。

最新更新