Transaction has been rolled back because it has been marked as rollback
原因就是发生异常后当前的事务就被标记为rollback-only,外层事务管理器再commit时就会抛此异常,解决方法是
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
<property name="globalRollbackOnParticipationFailure" value="false" />
</bean>
在 org.springframework.transaction.support.AbstractPlatformTransactionManager 中有个叫
isGlobalRollbackOnParticipationFailure的参数,默认是true.
源码中说明:
Switch this to "false" to let the transaction originator make the rollback decision. If a participating transaction fails with an exception, the caller can still decide to continue with a different path within the transaction. However, note that this will only work as long as all participating resources are capable of continuing towards a transaction commit even after a data access failure: This is generally not the case for a Hibernate Session, for example; neither is it for a sequence of JDBC insert/update/delete operations.
大意是:如果isGlobalRollbackOnParticipationFailure为false,则会让主事务决定回滚,如果当遇到exception加入事务失败时,调用者能继续在事务内决定是回滚还是继续。然而,要注意是那样做仅仅适用于在数据访问失败的情况下且只要所有操作事务能提交。
相关推荐
在Spring中,AOP可以通过基于XML的配置或者基于注解的方式实现。 ##### 2.2 使用Spring AOP增强DAO 在客户管理系统中,为了实现对所有DAO类中以`save`开头的方法进行权限验证,可以使用Spring AOP的注解方式来实现...
在Spring中,事务管理分为编程式和声明式两种方式。本篇文章将详细解释Spring事务管理的流程,以及如何通过时序图来理解这一过程。 首先,我们来看Spring事务的流程。当一个事务开始时,通常会经历以下步骤: 1. *...
在Spring中,事务管理器(如DataSourceTransactionManager或HibernateTransactionManager)是核心组件,它负责与底层数据库进行交互,执行事务的开始、提交、回滚等操作。开发者可以在XML配置文件中定义事务管理器,...
案例中的"springStudy04_transaction"可能包含了一个使用Spring进行事务管理的简单应用程序,其中可能包括了数据库连接配置、数据访问对象(DAO)的实现以及事务控制的代码。你可以通过阅读源代码来了解如何在实际...
Spring事务原理是指Spring框架中的一种机制,用于管理事务,并提供了多种配置方式。事务是指一系列的操作,作为一个整体执行,如果其中某个操作失败,整个事务将回滚。Spring事务原理围绕着两个核心:...
在Spring中,通过`@Transactional`注解的`propagation`属性定义事务的传播行为,比如REQUIRED(如果当前存在事务,则加入该事务;如果不存在,则创建一个新的事务)、SUPPORTS(如果当前存在事务,则加入该事务;...
本文将详细介绍 Spring 和 Spring Boot 中事务的使用方法及其注意事项。 #### 二、事务的基本概念 在讨论 Spring 事务之前,我们先从日常生活中的一个常见场景——取钱说起。当你从 ATM 机上取款时,这一过程可以...
在Spring中,声明式事务管理依赖于AOP(面向切面编程)来实现。首先,需要配置一个事务管理器,通常使用`DataSourceTransactionManager`,它与数据源`dataSource`关联。然后,通过`<tx:annotation-driven>`标签启用...
编程式事务管理通过调用`PlatformTransactionManager`接口提供的方法进行显式控制,如`beginTransaction()`, `commit()`, 和`rollback()`。声明式事务管理则依赖于AOP(面向切面编程)来自动处理事务的开始、提交或...
总的来说,Spring事务管理通过其强大的声明式事务处理能力和对各种事务策略的支持,使得开发者能够轻松地在应用程序中实现高效、一致的事务处理。通过理解并合理运用上述知识点,开发者可以构建出稳定、健壮的分布式...
### Spring中的Transaction事务传播行为种类详解 #### 一、引言 在开发基于Spring框架的应用程序时,事务管理是确保数据一致性的重要手段之一。Spring框架提供了丰富的事务管理功能,其中包括了事务传播行为...
在Spring Boot中,数据库事务控制是实现业务逻辑一致性的重要手段。本资料主要围绕Spring Boot如何进行数据库事务管理进行深入探讨。 首先,我们需要了解什么是事务。事务是数据库操作的基本单位,它保证了一组...
在Spring中,通常会使用`@Transactional`注解来声明一个方法需要在事务中执行。这个注解可以放在类级别或方法级别,以定义事务的范围。 对于JDBC事务,Spring提供了一种统一的事务管理接口`...
在Spring中,事务管理通常通过`<tx:annotation-driven>`和`<bean>`标签来实现。`<tx:annotation-driven>`标签用于启用基于注解的事务管理,而`<bean>`标签则用于定义TransactionManager bean,例如...
在Spring中,事务配置主要涉及到三个核心组件:DataSource、TransactionManager和代理机制。下面将详细介绍Spring的五种事务配置方式。 1. **基于XML的事务配置** - **每个Bean都有一个代理**: 在这种配置方式中...
在数据库系统中,事务是一组操作,这些操作被视为一个逻辑工作单元,要么全部成功,要么全部失败。事务的四大特性,也称为ACID属性,包括原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性...
在Spring中,事务管理可以通过编程式和声明式两种方式实现。编程式事务管理使用TransactionTemplate或PlatformTransactionManager接口手动管理事务,而声明式事务管理则是通过在XML配置或注解中定义事务规则。在这个...
这种方式灵活性较高,但会导致代码中事务管理的逻辑过于耦合,不易维护。在Spring中,可以使用`@Transactional`注解的`propagation`属性配合`TransactionTemplate`进行更安全的编程式事务管理。 2. **声明式事务...
开发者需要在代码中调用`beginTransaction()`、`commit()`、`rollback()`等方法来控制事务的生命周期。虽然这种方式提供了最大的灵活性,但往往会使代码变得复杂且难以维护。 2. **声明式事务管理**:这是Spring最...
1. `@Transactional`: 这是Spring中最常用的事务注解,它可以应用在类或方法级别。当应用在类上时,该类的所有公共方法都将具有事务属性;如果应用于方法,只对被注解的方法生效。注解的属性包括 propagation(事务...