在一个用户注册方法中,有三个数据库操作:1、生成用户save到用户表 2、用户设置的密码save到密码表 3、生成用户房间信息save到房间表
现在在步骤3、获取当前房间最大ID并设置时,由于表是空的,获得房间ID爆了org.springframework.aop.AopInvocationException: Null return value from advice does not match primitive return type for:错误的异常
然后,操作1、用户信息save的操作回滚成功, 操作2、密码表的save操作却没有回滚,导致用户注册失败后,由于2、没有回滚,用户的密码一直存在,就一直提示“注册失败,”。。。
然后1、2、3的save方法都已加了注解“@Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})”,按道理来说,遇到异常,三个应该一起回滚,然而只回滚了部分。。。
原因:和注解没有关系,是因为mysql的用户user表引擎使用了InnoDB,而2、步骤用的密码表,用的是MyISAM;而 MyISAM引擎不支持事物,所以导致了步骤2、没有回退,改为InnoDB解决.
执行异常,但是事物没有全部回滚
最新推荐文章于 2025-11-21 16:15:28 发布
1957

被折叠的 条评论
为什么被折叠?



