项目中新增过程中如果出现异常需要回滚, 在service实现方法中使用@transactional注解失效
解决:
1, 在controller中使用try{}catch捕捉异常
2, 在service实现中使用@transactional注解
controller
@requestmapping(value = "/add",method = requestmethod.post) @responsebody public result add(httpservletrequest request, @requestbody user user){ result result = new result(); try{ result = service.insert(user); }catch (exception e){ logger.error("失败", e); } return result; }
service:
@transactional(rollbackfor = exception.class) 设置出现什么异常回滚, 默认情况下,spring会对unchecked异常进行事务回滚;如果是checked异常则不回滚
java里面将派生于error或者runtimeexception(比如空指针,1/0)的异常称为unchecked异常, 其他继承自java.lang.exception得异常统称为checked exception,如ioexception、timeoutexception等
@override @transactional(rollbackfor = exception.class) public result insert(user user){ result result = new result();int result = usermapper.insert(user);return result; }
总结: 异常捕获在controller去做,这样在service层中 @transactional在发生异常时可以正常进行回滚操作。
参考:
如对本文有疑问, 点击进行留言回复!!
springmvc之ResponseBody响应json数据遇到的错误及解决
uni-app 后台升级 静默升级 uniapp 后台更新 静默更新 在线升级
SpringBoot多Module启动报错Could not transfer metadata
Hibernate项目报错:Cannot call sendError() after the response has been committed
网友评论