@Transactional与try-catch组合使用从而注解失效,事务不进行回滚的常见情况

news/2024/9/8 3:54:12/

问题复现

    @Transactional(rollbackFor = Exception.class)public void insert() {try {A();B();} catch (Exception e) {e.printStackTrace();}}private void A() {// 插入表A}private void B() {// 插入表B}

这里的execute方法使用了@Transactional注解,同时调用了插入方法 A 和 方法B。
运行后方法A成功插入数据到表A,而方法B插入失败抛出异常。
理想状态:方法B抛出异常,事务进行回滚,方法A不会插入数据到表A。
现实情况:表A有方法A插入的数据,事务失效,没能进行回滚。


原因

catch已经捕获了这个异常并进行处理,事务管理器会认为当前事务是正常的,从而导致注解失效回滚失败。


解决方案:

一、去掉try-catch。

二、catch中手动抛出新的异常

(不推荐,本来catch就是捕获处理异常的,你这又抛出异常不就白处理了。。。)

try{...
}catch(Exception e){throw new RuntimeException();
}

三、catch中手动设置事务回滚(推荐)

try{...
}catch(Exception e){TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}

http://www.ppmy.cn/news/1017248.html

相关文章

python poetry 创建project使用指定路径的python版本

有的时候我们的机器上装有多个python版本,比如我的电脑既有python2.7,又有python3.11,还装了python3.8,而系统默认的python版本是python3.11. 这种情况直接使用poetry init创建project的话肯定用到的是python3.11. 如果我想用pyth…

Cesium entity 渐隐渐显、闪烁

点entity function f2(){var x1;var flogtrue;//闪烁//var x0;var flogfalse;//渐显viewer.entities.add({name:"圆点point闪烁",position:Cesium.Cartesian3.fromDegrees(116.200.03,39.530.03,0),point : {show : true, // defaultcolor :new Cesium.CallbackProp…

Idea创建maven管理的web项目

如果你想在项目中添加一个传统的 src 目录来存放源代码,可以按照以下步骤操作: 1. 在项目视图中,右键单击项目名称,选择 “New” -> “Directory”。 2. 在弹出的对话框中,输入目录名称为 “src”,然后…

23.8.7 牛客暑期多校7部分题解

G - Cyperation 题目大意 有 n n n 个数&#xff0c;定义 i , j ( i < j ) i,\space j(i<j) i, j(i<j) 两个数的距离为 m i n ( j − i , n i − j ) min(j-i,\space ni-j) min(j−i, ni−j)&#xff0c;每次操作可以选择距离恰好为 k k k 的两个数减 1 1 1&a…

mybatis打印sql语句出现多余的limit关键字

1、事情起因 在项目中使用了PageHelper分页插件&#xff0c;由于需求特殊&#xff0c;需要自定义分页&#xff0c;代码编写完成后&#xff0c;事故出现了。 前端传参: {pageNum: 1,pageSize: 10, }已知表中数据10条&#xff0c;但是每次分页查询只有10条数据&#xff0c;排查…

并发多线程篇

线程的基础知识 面试题1&#xff1a;线程与进程的区别&#xff1f; 面试题2&#xff1a;并行和并发有什么区别&#xff1f; 面试题3&#xff1a;创建线程的方式有哪些&#xff1f; 面试题 4&#xff1a;runnable 和 callable 有什么区别&#xff1f; 面试题5&#xff1a;线程…

HTTPS安全通信

HTTPS,TLS/SSL Hyper Text Transfer Protocol over Secure Socket Layer,安全的超文本传输协议,网景公式设计了SSL(Secure Sockets Layer)协议用于对Http协议传输的数据进行加密,保证会话过程中的安全性。 使用TCP端口默认为443 TLS:(Transport Layer Security,传输层…

【Verilog/HDBits】

2023年8月7日 输出输入向量中1的个数 输出输入向量中1的个数 module top_module( input [2:0] in,output [1:0] out );assign out &in ? 3 : (^in ? 1 : (in ? 2 : 0)); //&in 1 means in 3b111; //^in 1 means there are odd number of 1 //in 0 means ther…

❤ TypeError: Assignment to constant variable-Vue3 项目使用

❤ TypeError: Assignment to constant variable 背景&#xff1a; Vue3 项目使用 TypeError: Assignment to constant variable. 原因&#xff1a; 因为我对const定义的常量重新赋值了 解决方法&#xff1a; 换成 var 声明

交替方向乘子

目录 一&#xff0c;交替方向乘子ADMM 1&#xff0c;带线性约束的分离优化模型 2&#xff0c;常见优化模型转带线性约束的分离优化模型 3&#xff0c;带线性约束的分离优化模型求解 4&#xff0c;交替方向乘子ADMM 本文部分内容来自教材 一&#xff0c;交替方向乘子ADMM …

C++11 新特性 ---- 原始字面量

一、原始字面量 R “xxx(原始字符串)xxx”&#xff0c;其中&#xff08;&#xff09;两边的字符串可以省略。 #include <iostream> #include <string> using namespace std; int main() {string str1 R"(D:\hello\heheda\test.txt)";string str2 R&q…

Softing工业获得自动化产品安全开发流程认证

Softing工业获得了TV Sd颁发的IEC 62443-4-1产品安全开发流程认证。 &#xff08;IEC 62443-4-1认证确保网络安全&#xff09; 截至2023年6月&#xff0c;位于德国哈尔和纽伦堡的工厂以及罗马尼亚克卢日的Softing工业研发部门已获得IEC 62443-4-1:2018标准的认证。该认证流程由…

【1281. 整数的各位积和之差】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个整数 n&#xff0c;请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。 示例 1&#xff1a; 输入&#xff1a;n 234 输出&#xff1a;15 解释&#xff1a; 各位数之积 …

SQL基础培训29-定时备份和还原

进度29-定时备份和还原 SQL基础培训 目录 1.定时备份和保留一周备份 2.查看创建好的维护计划,并执行 3.还原数据库 1.定时备份和保留一周备份 以SQL Server 2008或2012为例 打开SQL Server Management Studio,在“管理”——“维护计划”,右键点击“维护计划”,打开…

sentinel---滑动窗口的实现原理

sentinel有多种规则&#xff0c;包括&#xff1a;降级、限流、热点等等规则&#xff0c;这些规则均会涉及到时间因素&#xff0c;既在单位时间内的请求量满足各种条件之后的各种动作。 这里我们一起来探针一下sentinel中滑动窗口的实现 如上是一个滑动窗口的示意图。 这里先不…

git的日常使用

加入忽略列表&#xff1a;在.gitignore中加入忽略的文件&#xff0c;build/ 表示build文件夹下&#xff0c;*.jar 表示以jar结尾的&#xff0c;用换行符隔开将另一个分支合并到当前分支&#xff1a;git merge xxx冲突出现&#xff0c;可以看看这里&#xff1a;详解Git合并冲突—…

第十篇-Tesla P40+FastChat+Vicuna-13B-V1.5

部署环境 系统&#xff1a;CentOS-7 CPU: 14C28T 显卡&#xff1a;Tesla P40 24G 驱动: 515 CUDA: 11.7 cuDNN: 8.9.2.26下载模型 https://huggingface.co/lmsys/vicuna-13b-v1.5一个一个下载&#xff0c;26文件下载比较耗时 创建运行环境 conda create --name fastchat py…

深度ip转换器:一键更换ip地址方法

很多网友问小编有关深度ip转换器怎么用&#xff1f;最新深度ip转换器手机版app&#xff1f;下面小编整理了深度ip转换器怎么修改ip地址的技巧和诀窍&#xff0c; 让我们来详细的了解一下深度id转换器&#xff0c; 一、深度ip转换器怎么用 1.深度ip转换器怎么用&#xff0c;深度…

[C++] 类与对象(中)完整讲述运算符重载示例 -- 日期类(Date) -- const成员

目录 1、前言 2、全缺省的构造函数 3、打印接口 4、拷贝构造 5、赋值运算符重载&#xff08;operator&#xff09; 5.1赋值重载是默认成员函数&#xff0c;重载格式&#xff1a; 5.2 赋值重载不能为全局函数 5.3 编译器默认生成 6、析构函数 7、operator> 8、ope…

提取字符串标签中的文字js

DOM操作&#xff1a; const extractText (str) > {const parser new DOMParser();const doc parser.parseFromString(str, text/html);const textNodes doc.body.innerText.trim().split(\n);return textNodes; };const input <div>提取文字</div><p>…