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()注意将异常保存在数据库中,那么什么都不会发生,这就是为什么我这样做的原因)