2026-01-01 20:58:03
Java事务嵌套中子事务没有回滚通常与事务的传播属性和管理方式有关。
一、事务嵌套的基本概念
嵌套事务是指子事务在父事务中执行,子事务是父事务的一部分。在进入子事务之前,父事务会建立一个回滚点(save point),然后执行子事务。如果子事务回滚,父事务会回滚到进入子事务前建立的save point,然后尝试其他的事务或业务逻辑,父事务之前的操作不会受到影响,更不会自动回滚。而如果父事务回滚,子事务也会跟着回滚,因为子事务在父事务结束之前是不会提交的。
二、事务传播属性的影响
在Spring事务管理中,事务的传播属性会影响事务的行为。例如,PROPAGATION_REQUIRES_NEW属性会新建事务,如果当前存在事务,则把当前事务挂起。新建的事务将和被挂起的事务没有任何关系,是两个独立的事务。外层事务失败回滚之后,不能回滚内层事务执行的结果。这就是可能导致子事务没有回滚的一种情况。
三、其他可能导致事务不回滚的原因
四、解决建议
要解决子事务没有回滚的问题,需要检查事务的传播属性是否正确设置,以及事务管理配置是否正确。同时,也需要确保没有上述可能导致事务不回滚的其他问题存在。