转载:http://blog.csdn.net/l345480242/article/details/7588393

采用编程式事务
1、 getCurrentSession()与openSession()的区别?

* 采用getCurrentSession()创建的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>

采用声明式事务
声明式事务配置

* 配置SessionFactory

* 配置事务管理器

* 事务的传播特性

* 那些类哪些方法使用事务

2、编写业务逻辑方法

* 继承HibernateDaoSupport类,使用HibernateTemplate类持久化,HibernateTemplate

是Hibernate session的封装

* 默认的回滚是RuntimeException(包括继承RuntimeException的子类),普通异常不回滚

* 在编写业务逻辑方法时,最好将异常一直往上抛出,在呈现层处理(struts)

* spring的事务需要设置到业务方法上(事务边界定义到Facade类上),不要添加到Dao上

3、了解事务的集中传播忒性

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属性执行

4、Spring事务的隔离级别

1、 ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。

2、ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。

3、ISOLATION_READ_COMMITTED:保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。

4、ISOLATION_REPEATALBE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻想读。它除了保证一个事务不能读取另外一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。

5、ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不课重复读外,还避免了幻想读。

事务属性
T1
T2

Required

T1
T2

T1

RequiredNew

T1
T2

T2

Support

T1

T1

Mandatory

T1
抛异常

T1

NoSupport

T1

Never

T1

抛异常

à

<!-- 配置sessionFactory -- >

<bean id=”sessionFacory”class=”org.springframework.orm.hibernate3.LocalSessionFactoryBean”>

<property name=”configLocation”>

<value>classpath:hibernate.cfg.xml</value>

</property>

</bean>

<!-- 配置事务管理器-- >

<beanid=”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.bjsxt.usermgr.manager.*.*(..))”/>

<aop:advisor pointcut-ref=”allManagerMethod” advice-ref=”txAdvice”/>

</aop:config>

PROPAGATION_REQUIRED事务管理的更多相关文章

  1. spring声明式事务管理总结

    事务配置 首先在/WEB-INF/applicationContext.xml添加以下内容: <!-- 配置事务管理器 --> <bean id="transactionM ...

  2. Spring的事务管理

    事务 事务:是逻辑上一组操作,要么全都成功,要么全都失败. 事务特性(ACID) 原子性:事务不可分割 一致性:事务执行的前后,数据完整性保持一致 隔离性:一个事务执行的时候,不应该受到其他事务的打扰 ...

  3. Spring事务管理的三种方式

    一 .第一种:全注解声明式事务 Xml代码 复制代码 收藏代码 .<?xml version="1.0" encoding="UTF-8"?> .& ...

  4. Spring事务管理----声明式:利用TransactionProxyFactoryBean生成事务代理

    通常建议采用声明式事务管理.声明式事务管理的优势非常明显:代码中无需关于关注事务逻辑,让spring声明式事务管理负责事务逻辑,声明式事务管理无需与具体的事务逻辑耦合,可以方便地在不同事务逻辑之间切换 ...

  5. Spring事务管理

    Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作.今天一起学习一下Spring的事务管理.Spring的事务管理分为声明式跟编程式.声明式就是在Spring的配置文件中进行相关配置 ...

  6. 全面分析 Spring 的编程式事务管理及声明式事务管理

    开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...

  7. 事务管理(下) 配置spring事务管理的几种方式(声明式事务)

    配置spring事务管理的几种方式(声明式事务) 概要: Spring对编程式事务的支持与EJB有很大的区别.不像EJB和Java事务API(Java Transaction API, JTA)耦合在 ...

  8. @Transactional 事务管理

    全面分析 Spring 的编程式事务管理及声明式事务管理 事务传播行为 所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为.在Tra ...

  9. Spring事务管理器的应对

    Spring抽象的DAO体系兼容多种数据访问技术,它们各有特色,各有千秋.像Hibernate是非常优秀的ORM实现方案,但对底层SQL的控制不太方便:而iBatis则通过模板化技术让你方便地控制SQ ...

随机推荐

  1. Vue.js 2.0版

    Vue.js 2.0版升级,更改了好多方法或指令 new Vue({ el:'#demo', data:{ msg:"vue2.0" } }) v-model lazy numbe ...

  2. nginx自启动脚本

    #!/bin/bash # #Startup script for Nginx - this script starts and stops the nginx daemon # # chkconfi ...

  3. 图解 CSS: 理解样式表的逻辑(转载)

    原文:http://www.cnblogs.com/del/archive/2009/02/01/1382141.html 样式表可以是外部的.内联的或嵌入的; 链接外部样式文件一般是:<lin ...

  4. Zendframework application 引导过程

    Applications 会期望用户提供一个配置好的ServiceManager.提供以下服务: 1.EventManager 2.ModuleManager 3.Request 4.Response ...

  5. elipse+pydev+python开发arcgis脚本程序

    环境配置参考:http://www.cnblogs.com/halfacre/archive/2012/07/22/2603848.html 添加arcpy类库.arctoolbox.arcgis-b ...

  6. spring多数据源配置

    项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此.多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源.例如在一个spring和hibernate的框架的 ...

  7. MyException

    自定义Exception using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...

  8. zip压缩包密码破解

    有一种破解方法叫做Known plaintext attack.市面上的密码破解软件几乎都带有这个功能.操作方法就是找到加密压缩包中的任意一个文件,用同样的压缩软件同样的压缩方式压缩成一个不加密的包, ...

  9. 下拉刷新ListView实现原理

    (1)主要是onScroll()方法和onTouchEvent()方法,先是onTouchEvent()的ACTION_DOWN,然后是 ACTION_MOVE和onScroll()方法同时进行,最后 ...

  10. action间传多个参数时注意问题

    通常我们action之间传参可以有多种形式,举例说明:示例1: <result name="test" type="redirect-action"> ...