我们使用Spring 4.x和Spring Data JPA进行声明式事务管理,我有一个Controller,Service和一个像伪代码一样的存储库。
$('.ClicLog').click(function () {
console.log("clic !");
$('.nocollapse').toggleClass('LoginTest');
});
在上面的代码中,在调用 sampleService.saveMyEntity(entity); 之后会抛出一个错误但是事务没有标记回滚,因此最终用户将获得一个错误页面但是在场景后面实体得到了坚持。
有什么方法可以回滚交易吗?
答案 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()抛出异常时,整个事务将被回滚。