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

server/2024/10/20 1:20:50/

背景

需求是记录下操作过数据库的行为,将其记录到一个操作行为表中,我选择了使用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.ppmy.cn/server/133202.html

相关文章

QUIC 协议的优势

QUIC 协议的优势包括: 快速建立连接:将传输层和加密层的握手合并,减少了连接建立的延迟。QUIC 建连时间大约为 0~1RTT,相比 HTTPS 的 3RTT 建连,具有极大的优势。客户端第一次建连的握手协商需 1RTT,而已建…

JavaScript 中怎么判断前端各种运行环境

在 JavaScript 中,可以通过多种方式来判断前端应用的运行环境,比如浏览器环境、Node.js 环境、React Native 环境等。以下是一些常见的方法: 目录 1. 判断是否在浏览器环境中 2. 判断是否在 Node.js 环境中 3. 判断是否在 React Native 环…

Nature 正刊丨从植物吸收羰基硫推断陆地光合作用

01摘要 陆地光合作用或总初级生产力(GPP)是生物圈中最大的碳通量,但其全球规模和时空动态仍不确定1。历史上认为全球年平均GPP约为120 PgC yr-1(参考文献2,3,4,5,6),比根据氧-18(18O&#xff09…

Require:业界优秀的HTTP管理方案。

方案异步JDK额外依赖特点HttpURLConnection 【优点】Java内置,简单易用。对于简单的HTTP请求和响应处理非常合适。 【缺点】功能相对较少,不支持现代特性(如异步请求、连接池等)。API相对繁琐,处理复杂请求时代码冗长。…

K8s的储存

一 configmap 1.1 configmap的功能 configMap用于保存配置数据,以键值对形式存储。 configMap 资源提供了向 Pod 注入配置数据的方法。 镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。 etcd限制了文件大小不能超过1M 1.2 configmap的使用场…

SLAM评估工具evo学习

参考链接 官方github:https://github.com/MichaelGrupp/evo 一、 指令分析 1.1 tum数据集,evo_ape指令 evo_ape {kitti,tum,euroc,bag} -h evo_ape tum -h(1) 终端输入: evo_ape tum -h (2) 终端打印: usage: evo_ape tum …

pytorch训练和使用resnet

pytorch训练和使用resnet 使用 CIFAR-10数据集 训练 resnet resnet-train.py import torch import torchvision import torchvision.transforms as transforms import torch.nn as nn import torch.optim as optim# 在CIFAR-10数据集中 # 训练集:包含50000张图像…

滚雪球学Redis[3.3讲]:Redis数据持久化深入探讨:从 AOF 到混合持久化的演进

全文目录: 前言混合持久化1. RDB 与 AOF 之间的权衡2. 混合持久化的工作原理工作机制详解 3. 配置与实践实例演示 4. 实际应用中的案例分析5. 深入探讨混合持久化的优势与局限6. 扩展思考:如何选择 Redis 的持久化策略? 总结附:案…