记一次 @Transactional不生效的问题
来源:互联网 发布:excel矩阵相乘 编辑:程序博客网 时间:2024/05/17 00:02
今天写代码的时候有一个service需要用到事务,故使用@Transactional注解
@TransactionalMap<String, Object> joinTeam(Long teamId, Long userId) throws Exception;
这里抛出自己定义的异常来实现事务回滚
接口实现类方法如下
public Map<String, Object> joinTeam(Long teamId, Long userId) throws Exception { Map<String, Object> result = new HashMap<>(); Team team = teamService.getTeamById(teamId); //添加组队成员 TeamMember member = new TeamMember(); member.setUserId(userId); member.setTeamId(teamId); teamMemberDao.saveTeamMember(member); //更新组队人数 team.setCurrentSignup(team.getCurrentSignup() + 1); Long count = teamService.updateTeamCurrentSignup(team); int i = 0; while (count == 0) { if (i >= 3) { throw new BaseException(BaseException.OPTIMISTIC_LOCK); } team = teamService.getTeamById(teamId); team.setCurrentSignup(team.getCurrentSignup() + 1); count = teamService.updateTeamCurrentSignup(team); i++; } result.put("success", true); result.put("message", "加入成功!"); throw new Exception(BaseException.OPTIMISTIC_LOCK); }
teamMemberDao.saveTeamMember(member) 与 count = teamService.updateTeamCurrentSignup(team) 两个修改库操作,需要 teamService.updateTeamCurrentSignup(team) 抛异常来控制 teamMemberDao.saveTeamMember(member) 的数据回滚
但是结尾抛异常数据并不回滚,很是糟心。
于是查看Spring的Transactional的API文档,发现下面这段:
If no rules are relevant to the exception, it will be treated like DefaultTransactionAttribute (rolling back on runtime exceptions).
所以Transactional默认异常回滚是runtimeexcetion才回滚
excetion是所有异常的总称。
而runtimeexcetion是具体的某一个异常。
所以得将Transactional设置回滚异常为excetion
故将接口修改如下,这次再抛自定义异常就会回滚了
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)Map<String, Object> joinTeam(Long teamId, Long userId) throws Exception;
阅读全文
0 0
- 记一次 @Transactional不生效的问题
- atomikos 配置好后 @transactional 注解不生效的问题
- 记一次使用Android studio修改代码不生效的问题
- Spring @Transactional注解不生效
- 记一次mysql授权无法生效问题
- 一次诡异的git体验-merge不生效
- 输入法切换快捷键不生效的问题
- Android中setHeight不生效的问题
- 修改php.ini不生效的问题
- PHP参数修改不生效的问题
- crontab ntpdate不生效的问题
- alarmmanger set 不生效的问题
- ButterKnife 8.0.1不生效的问题
- @Transaction注解不生效的问题
- ButterKnife 8.0.1不生效的问题
- babel-plugin-import不生效的问题
- babel-plugin-import不生效的问题
- 跑马灯不生效的问题
- 机房重构总结2
- 交换机和路由器的区别
- Linux(CentOS) 下安装 Nginx
- 百度地图点聚合缩放,label标签消失
- 【Scikit-Learn 中文文档】双聚类
- 记一次 @Transactional不生效的问题
- iOS 警告收录及科学快速的消除方法
- 吴恩达Coursera深度学习课程 DeepLearning.ai 编程作业——Keras tutorial
- Android TextureView简易教程
- Android_GreenDao
- 一些简单的cmd命令
- Qt中Json循环渐进的简单例子分享,有错误欢迎指正,咸鱼一枚
- JS禁用复制、反键、F12
- c# 模仿 vue 实现 winform 的数据模型双向绑定