当前位置: 首页 > news >正文

mybatis-plus的Iservice接口的save方法,返回true,但是数据库表里却没有看到新记录

背景

需求是记录下操作过数据库的行为,将其记录到一个操作行为表中,我选择了使用aop特性来实现这一功能,发现当操作行为一切正常时,这个mybatis的save方法正常执行,行为表里正常增加记录。但是当操作行为抛出异常时,这个save方法也正常返回true,但是行为表里就是没有新增记录。(这篇博文遇到的是跟我这个类似的情景,但是它的catch不需要继续抛捕获到的异常。)

解决

经过gpt提醒,先打印了sql日志(springboot项目开启sql日志),发现sqlSession在关闭前并没有commit,说明事务发生了回滚,查阅资料得知,异常会导致回滚,因为我使用@Around包裹的操作行为,操作行为抛出的异常被切面catch了以后,还是要继续抛出去(因为有一个专门的ExceptionHandler来处理这些异常),所以在catch里抛异常会回滚事务,save也被回滚掉了。
我问gpt解决方法,它让在finally里进行save,但是这个save语句要被包裹在一个try-catch里,我不知道为什么要这样做,但是确实有效,还望大佬们答疑解惑。(这篇博文点了一下可能的原因,但是我还是没看懂)


http://www.mrgr.cn/news/51621.html

相关文章:

  • torchserve在转转GPU推理服务架构下的实践
  • 教学资料管理|基于springBoot的教学资料管理系统设计与实现(附项目源码+论文+数据库)
  • 设置静置情况下getCurrentCalls方法为何一直打印?
  • 25届计算机保研经验贴(中末九保清北及华五人、自动化所、北邮、港中文)
  • 【推导过程】常用连续分布的数学期望、方差、特征函数
  • Python--plt.errorbar学习笔记
  • 多场景多任务建模(三): M2M(Multi-Scenario Multi-Task Meta Learning)
  • H5 Canvas 举牌小人
  • DeepFM模型代码详解
  • rom定制系列------小米6x_澎湃os1.0.28安卓13定制固件修改 刷写过程与界面预览
  • cuda编程模型
  • GStreamer 简明教程(七):实现管道的动态数据流
  • 自定义多级联动选择器指南(uni-app)
  • 力扣之1398.购买了产品A和产品B却没有购买产品C顾客
  • 飞牛NAS未识别到网卡
  • 【优选算法】——双指针(下篇)!
  • 有关 C#多表查询学习
  • 一步步优化Redis实现分布式锁
  • 【IRV2】Deepfake video detection using InceptionResnetV2
  • Java基础概览和常用知识(七)