我的控制器中有以下方法:
@Transactional
def update(Filter filterInstance) {
bindData(filterInstance, params, [include: ['name, 'code', 'value']])
filterService.update(filterInstance)
mappingService.update(filterInstance)
respond filterInstance
}
我需要在这里使用 @Transactional ,因为我调用多个服务。如何处理因某种原因交易失败的情况?我应该使用尝试捕捉还是可能还有其他方式?
谢谢!
答案 0 :(得分:2)
如果你在控制器动作中有代码,你必须留意两件事:
这很复杂,所以你应该把服务调用放到另一个服务方法中,你只需处理这些事务。
控制器操作是一个地方,您可以在其中触发非常简单的一步交易。如果您需要实现更复杂的TX逻辑,请在服务层
上执行请参阅ref-doc了解如何控制多步骤交易。
您可以使update()
方法返回false或抛出异常,如果发生这种情况,请调用status.setRollbackOnly()
。不要忘记使用update()
@Transactional(propagation = Propagation.SUPPORTS)
方法