java - Spring JPA - 实体分离?关于异常(exception)情况?

标签 java spring jpa

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

@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
}

我认为该物体不知何故正在脱离;不知道为什么。我自己做了一个测试,在 try block 中抛出异常,效果很好。状态得到了正确反射(reflect)。

我尝试再次抓取这个对象,执行itemRepo.findOne(item).setState(FAILED),但没有成功。我尝试过,itemRepo.save(item) - 不起作用。

有什么指点吗?

谢谢

最佳答案

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

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

关于java - Spring JPA - 实体分离?关于异常(exception)情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39535695/

相关文章:

java - 级联持久上的 Eclipselink 查询缓存失效

java - 检测是否启用了开发人员选项的万无一失的方法?

spring - 使用 Spring Integration TCP IP 套接字发送和接收数据

mysql - Spring Data JPA - 对 crud 存储库的 native 查询与连接一起使用?

mysql - 如何在 mySQL 数据库中表示字符串数组

java - volatile HashMap 不在 Thead 之外更新

Java:如何在没有重复的情况下随机化数组列表

java - Spring MVC JSP Jquery 在按钮单击后重定向错误上调用 Controller 方法

java - 如何删除 @ManyToMany 关联(加入的链接)而不删除实际的目标实体

java - java中的这些注释会抛出什么异常?