Spring声明式事务管理和回滚处理

时间:2016-01-18 09:19:04

标签: spring spring-mvc spring-transactions

我们使用Spring 4.x和Spring Data JPA进行声明式事务管理,我有一个Controller,Service和一个像伪代码一样的存储库。

$('.ClicLog').click(function () {
    console.log("clic !");
    $('.nocollapse').toggleClass('LoginTest');
});

在上面的代码中,在调用 sampleService.saveMyEntity(entity); 之后会抛出一个错误但是事务没有标记回滚,因此最终用户将获得一个错误页面但是在场景后面实体得到了坚持。

有什么方法可以回滚交易吗?

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作。

@Transactional(rollbackFor=Exception.class)
public String saveSample(@Valid MyEntity entity) {
   //Validation
   //If Valid
   sampleService.saveMyEntity(entity);
   //After saving do some view related rendering logic
   //Assume here view related rendering logic throws Exception
   return "view"  
}

由于默认的“事务传播”是必需的,因此不需要新的。交易实际上将从SampleController.saveSample()开始,同一个交易将使用SampleService.saveMyEntity()。当从saveSample()抛出异常时,整个事务将被回滚。