看到好文章,轉發的
純屬收藏
親測有效
转发:https://blog.youkuaiyun.com/weixin_41485592/article/details/80877665
案例:
自定义异常类
public class IAMException extends Exception {
//.....
}
serviceImpl类
1.这种情况抛异常,数据不会回滚
@Service("userService")
public class UserServiceImpl implements UserService {
@Override
@Transactional
public BaseSuccessResponse addUser {
//....
userRepository.saveAndFlush(userSupplementEntity);
throw new IAMException(Error.SYSTEM_EXCEPTION);
//.....
}
2.这种情况发生异常会回滚
@Service("userService")
public class UserServiceImpl implements UserService {
@Override
@Transactional(rollbackFor = Exception.class) //一定要加 rollbackFor = Exception.class 参数,下面会说明原因:
public BaseSuccessResponse addUser {
//....
userRepository.saveAndFlush(userSupplementEntity);
throw new IAMException(Error.SYSTEM_EXCEPTION);
//.....
}
具体原因:当我们使用@Transaction 时默认为RuntimeException(也就是运行时异常)异常才会回滚。
而我们自定义异常IAMException 继承的是Exception,所以必须加上rollbackFor = Exception.class。