我有一个@service
类,它有一个@transactional
方法,该方法调用另一个服务上的另一个@transaction
方法。大概是这样的:
@Service
public class AService {
@Autowired
BService b;
@Autowired
ARepository aRepo;
@Transactional
public void methodOne(){
try{
b.methodTwo();
}catch(RuntimeException e){}
aRepo.save(new A());
}
}
@Service
public class BService{
@Transactional
public void methodTwo(){
if(true)
throw new RuntimeException();
}
}
我预计一个实体将被插入,但是如果任何嵌套事务抛出异常插入将拒绝,即使这个异常也是在aservice.methodOne()
处理的。
我可以用@transactional(propagation=propagation.requires_new)
注释methodtwo()
。但它会胜过表演。
如果在methodtwo
中发生异常后不想从methodone
回滚事务,可以用@transactional(noRollbackFor={runtimeexception.class})
添加注释methodone
。但请注意,这是一个有点滑坡,如果你真的想做的话,三思而后行。
我正在使用Spring JpaRepository在我的一个应用程序屏幕中实现CRUD。作为其中的一部分,我正在开发一个功能,用户可以保存所有汽车实体或没有(应该回滚)到数据库。我不确定如何使用Spring Boot、Spring Rest和Spring JPA实现此功能。 下面是我的源代码。 除此之外,我还得到了一个类似 请帮帮我。谢谢你。
这很好,但并不总是在代码中抛出运行时异常。因此,我挖掘并发现如下所示的rollbackFor; 现在,我必须更改所有代码,以使用RollBackfor更改@Transactional。但是还有其他方法可以将所有@transaction advice属性更改为rollbackFor=exception.class吗?
我正在使用Spring“@Transactional”注释来处理事务。 但以防万一 insert1()-成功插入表A中的数据。 这些插入是ibatis内置函数,用于触发DB中的插入。我遇到了以下异常 事务不会回滚,即insert1(),insert2()不会回滚 请让我知道我错过了什么
本文向大家介绍Java异常处理中的嵌套try块,包括了Java异常处理中的嵌套try块的使用技巧和注意事项,需要的朋友参考一下 顾名思义,try块中的try块在Java中称为嵌套try块。当不同的块(例如外部和内部)可能导致不同的错误时,就需要这样做。要处理它们,我们需要嵌套的try块。 现在让我们看一个实现嵌套try块的示例- 示例 输出结果 现在我们将在上面的示例中进行一些更改- 示例 输出结
非常感谢
问题内容: 我在下面使用HIbernate和Spring和JPA。当引发PersistenceException时,我想捕获它并返回错误消息,以便它不会传播到调用者。 但是我得到一个异常,说我需要在异常之后回滚事务,但是当我捕获到异常并且不想重新抛出该异常时,如何回滚它呢? 问题答案: 似乎没有办法回退由Spring ORM管理的失败事务。问题中显示的代码是服务类。将其持久性例程提取到单独的DAO