gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:14:41 24 4
gpt4 key购买 nike

我不确定我问得是否正确,但我有一个事务性方法,在其中我获取一个项目列表。现在,在处理其中一项时,我遇到了无效的数据使用异常[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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com