spring boot @Transactional事物不回滚, 是为什么

showtime645 2019-03-21 02:42:37
spring boot @Transactional事物不回滚, 是为什么?

@Override
@Transactional
public void save() {
User user = new User(1, "张");
this.userDao.save(user);
if ( true ) {
throw new RuntimeException("test");
}
}


类似这样的代码, 执行完save方法, 数据库增加一条记录, 紧接着抛出异常. 但事物不回滚.
数据库时mysql , innoDB引擎.
启动类加了注解@EnableTransactionManagement
...全文
302 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
3、默认情况下,Spring会对unchecked异常进行事务回滚;如果是checked异常则不回滚。 辣么什么是checked异常,什么是unchecked异常 java里面将派生于Error或者RuntimeException(比如空指针,1/0)的异常称为unchecked异常,其他继承自java.lang.Exception得异常统称为Checked Exception,如IOException、TimeoutException等 --------------------- 作者:一年e度的夏天 来源:CSDN 原文:https://blog.csdn.net/u011410529/article/details/54287307 版权声明:本文为博主原创文章,转载请附上博文链接!
qq_37966597 2019-03-21
  • 打赏
  • 举报
回复
可能创建数据库时 引擎的问题
931828653 2019-03-21
  • 打赏
  • 举报
回复
解决方案一:手动回滚。给注解加上参数如:@Transactional(rollbackFor=Exception.class) 解决方案二:在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常
showtime645 2019-03-21
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
@transactional注解加上rollbackFor=yourexceptionclass.class试试


这个文章里面的方法都删了,也试了你给的这个方法,自己集成了Exception, 然后抛出,也还是不行
qybao 2019-03-21
  • 打赏
  • 举报
回复
@transactional注解加上rollbackFor=yourexceptionclass.class试试

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧