采用声明式事务
1、了解事务的传播特性
1、propagation_required:如果当前存在一个事务,则支持当前事务,如果没有事务则开启事务
2、propagation_supports:如果存在一个事务,则支持当前事务,如果没有事务则非事务执行
3、propagation_mandatory:如果存在一个事务,则支持当前事务,如果没有事务则抛出异常
4、propagation_requires_new:总是开启新事务,如果当前存在一个事务,则把当前事务挂起
5、propagation_not_supported:总是非事务执行,总是挂起当前存在的事务
6、propagation_never:总是非事务执行,如果当前存在一个事务,则抛出异常
7、propagation_nested:如果存在一个事务,则运行在一个嵌套的事务中,如果没有活动的事务,
则按TransactionDefinition.propagation_required 属性执行
2、事务的隔离级别
1、isolation_default:这是一个platfromTransactionManager默认的隔离界别,使用数据库默认的事务隔离级别,
另外四个与jdbc的隔离级别相对应
2、isolation_read_uncommitted: 这是事务最低的隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。
这种隔离ijbie会产生脏读,不可重复读和幻像读。
3、isolation_read_committed: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该
事务为提交的数据
4、isolation_repeatable_read: 这种事务隔离界别可以防止脏读,不可重复读。但是可能出现幻像读。
它除了保证一个事务不能读取另外一个未提交的数据外,还保证了避免下面的情况发生(不可重复读)。
5、isolation_serializable 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。
除了防止脏读,不可重复读外,还避免了幻像读。
3、声明式事务配置
* 配置sessionFactory
<!-- 配置sesionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
* 配置事务管理器
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
* 事务的传播特性
<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="modify*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
* 那些类那些方法使用事务
<!-- 那些类的那些方法参与事务 -->
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(* com.gzbb.usermgr.manager.*.*(..))"/>
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
</aop:config>
4、编写业务逻辑方法
* 继承HibernateDaoSupport类,使用HibernateTemplate来持久化,HibernateTemplate是
Hibernate,Session的轻量级封装
* 默认情况下运行期异常才回滚(包括RuntimeException的子类),普通异常不会回滚
* 编写业务逻辑层时,最好将异常一直向上抛出,在表示层(struts)处理
* 关于事务边界设置,通常设置到业务层,不要添加到Dao上
采用编程式事务
1、getCurrentSession与openSession的区别
* 采用getCurrentSession创建的session会把当前session绑定到当前线程中,而采用openSession
创建的session则不会
* 采用getCurrentSession创建的session在commit或rollback时就会关闭,而采用openSession
创建的session必须手动关闭
2、使用getCurrentSession需要在hibernate.cfg.xml文件中加如下配置:
* 如果使用本地事务(jdbc事务)
<property name="hibernate.current_session_context_class">thread</property>
* 如果使用全局事务(jta事务)
<property name="hibernate.current_session_context_class">jta</property>
分享到:
相关推荐
Spring 编程式事务与声明式事务详解 本文将详细解释 Spring 的编程式事务管理及声明式事务管理,帮助读者理清思路。 事务管理的重要性 事务管理对于企业应用至关重要。它保证了用户的每一次操作都是可靠的,即便...
Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 **编程式事务管理**是通过编写代码来显式地管理事务的开始、提交、回滚等操作。在Spring中,可以使用PlatformTransactionManager接口的实现...
本文将全面分析Spring中的编程式事务管理和声明式事务管理,旨在帮助开发者深入理解这两种事务管理方式,并在实际项目中合理选择。 **编程式事务管理** 编程式事务管理是通过代码直接控制事务的开始、提交、回滚等...
本篇文章将深入探讨Spring中的两种主要事务管理方式:编程式事务管理和声明式事务管理。 1. 编程式事务管理: 编程式事务管理允许开发者直接在代码中控制事务的开始、提交、回滚等操作。这种方式具有较高的灵活性,...
本篇文章将重点讨论如何在Spring框架中集成Hibernate,并探讨编程式事务管理和Spring AOP的声明式事务。 首先,让我们理解Spring与Hibernate的集成。为了整合这两个库,你需要在Spring配置文件中定义Hibernate的...
Spring提供了两种主要的事务管理方式:声明式事务管理和编程式事务管理。本篇文章将聚焦于编程式事务管理,特别是如何通过`TransactionTemplate`进行事务控制。 1. **Spring编程式事务管理**: 编程式事务管理允许...
全面分析 Spring 的编程式事务管理与声明式事务管理 本文将从 Spring 的事务管理入手,深入讲解编程式事务管理和声明式事务管理的实现机制和原理。通过本文的学习,您将能够理解 Spring 事务管理的本质,并灵活运用...
本教程将深入探讨如何在Spring中实现自定义事务管理器、编程式事务处理以及声明式事务`@Transactional`的使用。 首先,让我们了解事务管理的基本概念。事务是一组数据库操作,这些操作要么全部执行,要么全部回滚,...
在实际开发中,我们通常使用声明式事务管理,它基于AOP(面向切面编程)来简化事务处理。然而,有时为了更细粒度的控制或者在特定场景下,我们可能需要采用编程式事务管理。 首先,了解事务的四大特性(ACID)是必...
Spring 声明式事务和Spring 编程式事务
### Spring的编程式事务管理与声明式事务管理详解 #### 引言 Spring框架作为Java企业级开发的首选,其事务管理模块是实现业务逻辑可靠性和数据一致性的重要组成部分。Spring支持两种事务管理方式:编程式事务管理...
编程式事务管理是相对于声明式事务管理的一种方式,它允许开发者通过代码来显式控制事务的开始、提交、回滚等操作。这在某些特定场景下,如复杂的事务逻辑或需要自定义事务边界时,是很有用的。 首先,我们需要了解...
Spring提供了多种事务管理方式,其中编程式事务管理和声明式事务管理是两种主要的模式。编程式事务管理允许开发者通过代码来精确控制事务的边界,而`TransactionTemplate`就是Spring为编程式事务管理提供的一种便捷...
相比之下,声明式事务管理更加简洁,它将事务管理的逻辑与业务逻辑解耦。在Spring中,声明式事务管理是基于AOP(面向切面编程)实现的。我们只需要在方法上添加@Transactional注解,就可以让Spring自动进行事务管理...
本文主要介绍了Spring编程式和声明式事务实例讲解小结,涵盖了Spring事务管理的两种方式:编程式事务管理和声明式事务管理。编程式事务管理通过Transaction Template手动管理事务,而声明式事务管理则通过AOP实现。 ...
Spring提供两种事务管理方式:编程式事务管理和声明式事务管理。编程式事务管理通过编写代码来控制事务的开始、提交、回滚等操作,灵活性高但侵入性强。相比之下,声明式事务管理则更加简洁,它通过配置或注解来...
相较于编程式事务管理,声明式事务处理更加简洁、易于维护,它将事务管理与业务逻辑解耦,使开发者可以专注于业务代码的编写。 声明式事务处理的核心在于XML配置或注解方式来定义事务的边界。在Spring框架中,主要...