@Transactional
method() {
try {
update1()
update2()
}
catch (Exception ex) {
// creating a response with error message and error code object
}
return response ( contains response details for update1() and update2() )
}
当update2()失败时,我需要一些帮助来回滚update1()中发生的事务。
当update1()失败时,代码工作正常,因为我们还没有达到update2() 但是当update1()成功并且update2()失败时,我捕获异常以创建响应对象,在catch块中抛出异常不是一个选项,因为我需要创建一个响应对象...在这种情况下..状态为201的update1和状态为500的update2在所有状态500上显示.. ..
请帮助......
答案 0 :(得分:0)
我刚发现的一个解决方案如下,对我有用。 如果此解决方案有替代方案,请与我们联系。感谢
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/transaction.html
在我的catch块中添加以下内容 -
TransactionAspectSupport.currentTransactionStatus()使用setRollbackOnly();
答案 1 :(得分:0)
您可以使用TransactionTemplate
获得更细粒度的交易。
TransactionTemplate tt = new TransactionTemplate(tx);
tt.execute(new TransactionCallbackWithoutResult(){
@Override
protected void doInTransactionWithoutResult(TransactionStatus status){
...
}
}
您不需要为回滚抛出异常。使用TransactionStatus
,您可以调用setRollbackOnly
通知事务唯一可能的结果是回滚。