首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么加了@Transactional注解,事务没有回滚?

在前天的《事务管理入门》一文发布之后,有读者联系说根据文章尝试,加了@Transactional注解之后,事务并没有回滚。...经过一顿沟通排查之后,找到了原因,在此记录一下,给后面如果碰到类似问题的童鞋一个参考。...这里特地采用了MySQL5InnoDBDialect,主要为了保障在使用Spring Data JPA时候,Hibernate自动创建表的时候使用InnoDB存储引擎,不然就会以默认存储引擎MyISAM...来建表,而MyISAM存储引擎是没有事务的。...所以,如果你的事务没有生效,那么可以看看创建的表,是不是使用了MyISAM存储引擎,如果是的话,那就是这个原因了! 除此之外,对于事务没有生效的可能还很多,比如,在同一个类中定义又调用等。

93410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    咦,为什么我的事务回滚不了?

    MySQL 事务小伙伴们都懂,通过 begin 开启事务,通过 commit 提交事务或者通过 rollback 回滚事务。...四个案例看懂 MySQL 事务隔离级别 正常来说,当我们开启一个事务之后,需要 commit 或者 rollback 来结束一个事务的,但是有时候,一些操作会自动帮我们提交事务,如果大家不了解隐式事务的话...回滚。 再次查询数据。 到第六步的时候,我们发现查询到的数据只剩三条了,说明第五步的回滚并没有生效。原因就在于执行 alter 之前,事务已经被隐式提交了。...对于上面的案例,如果大家去掉第四步的 alter,那么回滚是可以回滚成功的,这个小伙伴们自己来测试,我就不演示了。...我举个简单例子: 可以看到,跟第一小节的测试步骤一样,只不过第四步换成一个 GRANT 语句,那么最终的事务回滚也会失效,原因就在于事务已经提交了。

    1K20

    spring事务为什么不生效,回滚失效,事务try catch

    真正的数据库层的事务提交和回滚是通过binlog或者redo log实现的。..., root); 开启事务connection .setAutoCommit(true/false); 执行CRUD 提交事务/回滚事务 connection .commit() / connection...新建的事务将和被挂起的事务没有任何关系,是两个独立的事务,外层事务失败回滚之后,不能回滚内层事务执行的结果,内层事务失败抛出异常,外层事务捕获,也可以不处理回滚操作 PROPAGATION_SUPPORTS...a、b、e回不回滚主要看是否抛出异常。 spring 什么情况下进行事务回滚?...Spring、EJB的声明式事务默认情况下都是在抛出unchecked exception后才会触发事务的回滚 unchecked异常,即运行时异常runntimeException 回滚事务; checked

    3.3K10

    ⑨【MySQL事务】事务开启、提交、回滚,事务特性ACID,脏读、幻读、不可重复读。

    == MySQL的事务是默认自动提交的,当执行一条DML语句(对表字段进行增删改),MySQL会立即隐式地提交事务。 == 2....修改事务提交方式 -- @@autocommit = 0 手动提交 -- @@autocommit = 1 自动提交 ②提交事务 COMMIT; ③回滚事务 ROLLBACK; ④提交事务 START...一致性(Consistency): 事务完成时,必须使所有的数据都保持一致状态。 隔离性(Isolation): 数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。...持久性(Durability): 事务一旦提交或回滚,它对数据库数据的改变就是永久的。 4. 脏读、幻读、不可重复读 并发事务问题: ①脏读: 一个事务读到另一个事务还没有提交的数据。...②不可重复读: 一个事务先后读取同一条记录,但两次读取的数据不一致。 ③幻读: 一个事务按照条件查询数据时,没有对应的数据,但是在插入数据时,又发现这行数据已经存在,像是出现了“幻影”。 5.

    26730

    Spring事务的提交和回滚机制,以及分布式事务的处理解决方案

    Spring事务的提交和回滚机制如下:提交机制:Spring事务的默认提交机制是自动提交。当事务方法顺利执行完成(没有抛出异常)时,Spring会自动将事务提交到数据库中保存。...回滚机制:Spring事务的回滚机制可以分为两种情况:未检查异常(unchecked exception):当事务方法抛出未检查异常时,Spring会自动回滚事务。...在发生未检查异常时,事务将回滚并数据库中的操作将被撤销。检查异常(checked exception):当事务方法抛出检查异常时,默认情况下Spring不会自动回滚事务。...,Spring事务会根据异常类型是否为检查异常以及是否配置了回滚异常类型来决定是否回滚事务。...未检查异常会自动回滚,而检查异常需要通过配置来决定是否回滚。

    1.2K91

    MySQL数据库——事务的操作(开启、回滚、提交)、特征、隔离级别基础总结

    1.1 事务的操作 开启事务:start transaction; 回滚:rollback; 提交:commit; 【举例】:还是用这个A给B转账的例子,在SQLyog中进行模拟开启事务、回滚、提交 -...回滚事务 ROLLBACK; 1)在A窗口中先开启事务,然后执行张三账户-500,-》出错了-》李四账户+500,此时查询A窗口数据,张三确实-500,但李四还是100;在B窗口中查询数据,张三和李四都是...2)发现错误后,执行回滚操作,再次在窗口A和B中查询,数据都是1000,回滚操作成功。...3)在A窗口中先开启事务,然后执行张三账户-500-》李四账户+500,此时查询A窗口数据,张三确实-500,李四+500;在B窗口中查询数据,张三和李四都是1000,没发生变化;因在A窗口中的操作都OK...,执行提交事务,再次在窗口A和B中查询,数据都发生正确变化,事务提交成功。

    20.7K31

    当你在 Linux 上启动一个进程时会发生什么?

    我们已经在博客上讨论了很多关于系统调用的问题,每当你启动一个进程或者打开一个文件,这都是一个系统调用。...事实证明,有了 C 或 Python 的技能,你可以在几个小时内编写一个非常简单的 shell,像 bash 一样。(至少如果你旁边能有个人多少懂一点,如果没有的话用时会久一点。)...}else{ // 我是父进程耶 // 继续做一个酷酷的美男子吧 // 需要的话,我可以等待子进程结束 } 上文提到的“脑子被吃掉”是什么意思呢?...进程有很多属性: 打开的文件(包括打开的网络连接) 环境变量 信号处理程序(在程序上运行 Ctrl + C 时会发生什么?)...为什么你需要知道这么多 你可能会说,好吧,这些细节听起来很厉害,但为什么这么重要?关于信号处理程序或环境变量的细节会被继承吗?这对我的日常编程有什么实际影响呢? 有可能哦!

    1.1K70

    ReactDOM.render在react中执行之后发生了什么?

    callback: 渲染完成后的回调函数legacyRenderSubtreeIntoContainer位于:react-dom/src/client/ReactDOMLegacy.js 作用:判断是否为初次渲染..._internalRoot赋值给fiberRoot同时封装callback回调,然后调用unbatchedUpdates立即更新子节点。...//(2)没有提交的被挂起的任务 //(3)没有提交的可能被挂起的任务 //当前更新对应的过期时间 this.finishedExpirationTime = NoWork; //已经完成任务的...FiberRoot对象,如果你只有一个Root,那么该对象就是这个Root对应的Fiber或null //在commit(提交)阶段只会处理该值对应的任务 this.finishedWork = null...节点树中的‘parent’,用来在处理完这个节点之后向上返回 this.return = null; // 指向第一个子节点 this.child = null; // 指向自己的兄弟节点,兄弟节点的

    70920

    Spring事务的回滚和提交你真的明白了吗,本篇文章带你走近源码。干货满满

    上一篇文章讲解了获取事务,并通过获取的connection设置只读,隔离级别等;这篇文章讲事务剩下的回滚和提交。 事务的回滚处理 之前已经完成了目标方法运行前的事务准备工作。...,还需要做一个判断,不知道大家还有没有印象,在我们分析事务异常处理规则的时候,当某个事务既没保存点,又不是新事务,Spring对它的处理方式只是设置一个回滚标识(具体是在AbstractPlatformTransactionManager...,回滚的时候,并不执行回滚,只是标记一下回滚的状态,当外层事务提交的时候,会先判断ConnectionHolder中的回滚状态,如果已经标记为回滚,则不会提交,而是外层事务进行回滚。...,如果子事务没有回滚,将由外层事务一次性提交 如果程序流通过了事务的层层把关,最后顺利的进入了提交流程,那么同样,Spring会将事务提交的操作引导至底层数据库连接的API,进行事务提交。...总结 到这里之后,我们就把事务的回滚和提交就讲完了。有兴趣的童鞋可以自己再深入的了解一下。

    1.3K10

    ReactDOM.render在react源码中执行之后发生了什么?

    callback: 渲染完成后的回调函数legacyRenderSubtreeIntoContainer位于:react-dom/src/client/ReactDOMLegacy.js 作用:判断是否为初次渲染..._internalRoot赋值给fiberRoot同时封装callback回调,然后调用unbatchedUpdates立即更新子节点。...//(2)没有提交的被挂起的任务 //(3)没有提交的可能被挂起的任务 //当前更新对应的过期时间 this.finishedExpirationTime = NoWork; //已经完成任务的...FiberRoot对象,如果你只有一个Root,那么该对象就是这个Root对应的Fiber或null //在commit(提交)阶段只会处理该值对应的任务 this.finishedWork = null...节点树中的‘parent’,用来在处理完这个节点之后向上返回 this.return = null; // 指向第一个子节点 this.child = null; // 指向自己的兄弟节点,兄弟节点的

    56640

    ReactDOM.render在react源码中执行之后发生了什么?

    callback: 渲染完成后的回调函数相关参考视频讲解:进入学习legacyRenderSubtreeIntoContainer位于:react-dom/src/client/ReactDOMLegacy.js..._internalRoot赋值给fiberRoot同时封装callback回调,然后调用unbatchedUpdates立即更新子节点。...//(2)没有提交的被挂起的任务 //(3)没有提交的可能被挂起的任务 //当前更新对应的过期时间 this.finishedExpirationTime = NoWork; //已经完成任务的...FiberRoot对象,如果你只有一个Root,那么该对象就是这个Root对应的Fiber或null //在commit(提交)阶段只会处理该值对应的任务 this.finishedWork = null...节点树中的‘parent’,用来在处理完这个节点之后向上返回 this.return = null; // 指向第一个子节点 this.child = null; // 指向自己的兄弟节点,兄弟节点的

    55730

    在浏览器输入URL回车之后发生了什么?(超详细版)

    什么是 DNS 劫持 前端 dns-prefetch 优化 三、TCP 连接 TCP/IP 分为四层,在发送数据时,每层都要对数据进行封装: 1....然后根据动态语言的脚本,来决定调用什么类型的动态文件解释器来处理这个请求。...重绘(repaint) 改变了某个元素的背景色、文字颜色等等不会影响周围元素的位置变化时,就会发生重绘。 每次重绘后,浏览器还需要合并渲染层并输出到屏幕上。...HTTP 异步请求线程:通过XMLHttpRequest连接后,通过浏览器新开的一个线程,监控readyState状态变更时,如果设置了该状态的回调函数,则将该状态的处理函数推进事件队列中,等待JS引擎线程执行...微任务的执行在宏任务的同步任务之后,在异步任务之前。

    69420

    在浏览器输入URL回车之后发生了什么?(超详细版)

    什么是 DNS 劫持 前端 dns-prefetch 优化 三、TCP 连接 TCP/IP 分为四层,在发送数据时,每层都要对数据进行封装: ? 1....然后根据动态语言的脚本,来决定调用什么类型的动态文件解释器来处理这个请求。...重绘(repaint) 改变了某个元素的背景色、文字颜色等等不会影响周围元素的位置变化时,就会发生重绘。 每次重绘后,浏览器还需要合并渲染层并输出到屏幕上。...HTTP 异步请求线程:通过XMLHttpRequest连接后,通过浏览器新开的一个线程,监控readyState状态变更时,如果设置了该状态的回调函数,则将该状态的处理函数推进事件队列中,等待JS引擎线程执行...微任务的执行在宏任务的同步任务之后,在异步任务之前。 ?

    67040

    MySQL是如何实现事务ACID的?

    (Durability)持久性: 一个事务被提交之后。对数据库中数据的改变是持久的,即使数据库发生故障。 接下来就介绍下,MySQL在innoDB引擎下是事务特性的 3隔离性 为什么要先说隔离性呢?...隔离级别说明读未提交一个事务还没提交时,它做的变更就能被别的事务看到读已提交一个事务提交之后,它做的变更才会被其他事务看到可重复读一个事务中,对同一份数据的读取结果总是相同的,无论是否有其他事务对这份数据进行操作...当发生回滚时,InnoDB 会根据 undo log 的内容做与之前相反的工作: 对于每个 insert,回滚时会执行 delete; 对于每个 delete,回滚时会执行insert; 对于每个 update...,回滚时会执行一个相反的 update,把数据改回去。...如果是,则提交事务;b. 否则,回滚事务。 6一致性 一致性是事务追求的最终目标,前面提到的原子性、持久性和隔离性,其实都是为了保证数据库状态的一致性。

    98120

    MySQL是如何实现事务ACID的?

    (Durability)持久性: 一个事务被提交之后。对数据库中数据的改变是持久的,即使数据库发生故障。 接下来就介绍下,MySQL在innoDB引擎下是事务特性的 3隔离性 为什么要先说隔离性呢?...隔离级别 说明 读未提交 一个事务还没提交时,它做的变更就能被别的事务看到 读已提交 一个事务提交之后,它做的变更才会被其他事务看到 可重复读 一个事务中,对同一份数据的读取结果总是相同的,无论是否有其他事务对这份数据进行操作...当发生回滚时,InnoDB 会根据 undo log 的内容做与之前相反的工作: 对于每个 insert,回滚时会执行 delete; 对于每个 delete,回滚时会执行insert; 对于每个 update...,回滚时会执行一个相反的 update,把数据改回去。...如果是,则提交事务;b. 否则,回滚事务。 6一致性 一致性是事务追求的最终目标,前面提到的原子性、持久性和隔离性,其实都是为了保证数据库状态的一致性。

    66510
    领券