Java @事务处理在异常处理时继续
我正面临一些奇怪的问题 比如说:Java @事务处理在异常处理时继续,java,hibernate,spring-mvc,spring-transactions,Java,Hibernate,Spring Mvc,Spring Transactions,我正面临一些奇怪的问题 比如说: @RequestMapping(value = "/do", method = RequestMethod.POST) public void do() { try { Float x = 200; Float y = 100; TestObject x = new TestObject(x, y); x.setX(50); if (x.getX() > x.getY())
@RequestMapping(value = "/do", method = RequestMethod.POST)
public void do() {
try {
Float x = 200;
Float y = 100;
TestObject x = new TestObject(x, y);
x.setX(50);
if (x.getX() > x.getY())
testService.save(x);
else
throw new Exception("ERROR");
}
catch (Exception e) {
errorsService.save(e);
}
}
两种保存
方法都标记为@Transactional
问题:一旦代码抛出异常-errorsService.save(e)
进行提交-将50
添加为TestObject
的x值。我试图声明@Transactional(rollboor=Exception.class)
-没有成功。始终提交,不回滚
在所有其他方法中,事务没有任何问题-一切都很完美
有什么建议吗?提前谢谢你 要回滚事务,需要从@Transactional方法内部抛出异常,这在您的情况下不会发生。异常的堆栈跟踪是什么?它被扔到哪里了?我是手动操作的,这就是我想的问题。你为什么不回答这个问题?@JBNizet请看一下代码。。它手动抛出错误。无论如何,这里并没有任何堆栈跟踪,因为我只需要它来签名——若抛出异常,那个么我必须以单独的方式来处理它,看起来。。你能告诉我如何实施它吗?基本上我是用boolean flag实现的,但除了看起来更好之外。)@nKognito如果您想让catch块回滚,那么为什么要在catch块中调用save(),从而什么都不做?只要删除else块和catch块,您就可以得到您想要的:如果
x.getX()注意将异常保存在数据库中,那么什么都不会发生,这就是为什么我这样做的原因)