【发布时间】:2015-06-02 13:36:31
【问题描述】:
我的问题很简单,我想在方法上回滚使用@Transactional 创建的事务,并且仍然能够将一些结果返回给调用者。
@Transactional
public Object myMethod () {
...
// flag transaction for rollback
return myObject;
}
我看到这个question 似乎建议要么抛出异常(不是我真正想要的)或调用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();,但最终这也会抛出异常(我正在使用JpaTransactionManager)。
知道如何实现我的目标吗?
【问题讨论】:
-
如何使用 Spring TransactionTemplate 并“手动”处理事务。
-
也许
TransactionAspectSupport.getTransactionManager().rollback(TransactionStatus)? -
我们通过抛出一个包装结果的自定义异常解决了一个类似的问题,但我们也不是很喜欢它。使用异常作为常规控制流非常难看。
-
你是不是在后面改用Hibernate?如果是这样,您可以访问
SessionFactory来获取和回滚当前事务。 -
@Marvin 我正在使用 EclipseLink,但我敢肯定,如果你绕过 TM,它会导致其他问题,所以我不会那样做。
标签: java spring jpa transactions