`

Spring的事务类型

阅读更多
Spring提供了以下事务类型
1.  PROPAGATION_REQUIRED:支持当前正在运行的事务,如果事务不存在则创建新的事务
2.  PROPAGATION_REQUIRES_NEW:永远创建新的事务,如果当前存在事务则先挂起该事务的执行。
3.  PROPAGATION_SUPPORTS:如果在事务上下文中执行,则支持当前存在的事务,否则不支持事务
4.  PROPAGATION_MANDATORY:方法必须参与事务,如果不存在事务,则抛出异常。
5.  PROPAGATION_NESTED:困惑
6.  PROPAGATION_NOT_SUPPORTED:方法不参与事务,如果在事务上下文中运行,则挂起当前执行的事务
7. 
8.  PROPAGATION_NEVER:方法在不参与事务,如果在事务上下文中运行,则抛出异常
其中nested方式在ejb中也无对应,项不出应用的场景。
事务的隔离级不赘述。
Spring 的事务提供了一个readOnly的属性,该属性对事务处理进行了优化,该属性要来处理查询操作。对于增、删、改的操作则不能配置该属性。在使用 HibernateTransactionManager时,对readOnly属性,Hibernate Session不做检测,数据不会flush到数据库。
Spring提供了HibernateTemplate来管理session的生存期。在这种机制下对增删改必须配置事务属性。否则数据库将不被更新

不知道我的这些理解是否正确,提出来希望能够得到指正。

HibernateTemplate可以单独使用,不一定要配置事务属性
刷新数据是根据flush mode和是否存在事务共同判断的
刷新操作是在HibernateAccessor类的flushIfNecessary方法中执行的
flushIfNecessary方法如下
  public void flushIfNecessary(Session session, boolean existingTransaction) throws HibernateException {
    if (getFlushMode() == FLUSH_EAGER || (!existingTransaction && getFlushMode() == FLUSH_AUTO)) {
      logger.debug("Eagerly flushing Hibernate session");
      session.flush();
    }
  }


如果flush mode是FLUSH_EAGER,无论存不存在事务,都立即刷新。
如果不存在事务而flush mode是FLUSH_AUTO,则立即刷新,否则刷新操作将由事务控制。
flushIfNecessary在HibernateTemplate的execute方法中被调用,HibernateTemplate提供的数据访问操作最终都是调用execute实现的。
分享到:
评论

相关推荐

    Spring事务类型祥解

    Spring事务类型祥解讲解各种设置

    Spring 事务配置的五种方式.docx

    Spring事务类型详解: PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_...

    spring事务详解

    类型的事务资源。并且,Spring的事务框架与Spring提供的数据访问支持可以紧密结合,更是让我们在 事务管理与数据访问之间游刃有余。而最主要的是,结合Spring的AOP框架,Spring的事务框架为我们 带来了原来只有CMT才...

    Spring事务传播类型.md

    Spring事务传播类型.md

    深入理解Spring声明式事务:源码分析与应用实践

    此外,Spring事务管理器支持多种类型的事务策略,包括不同的传播行为和隔离级别,允许开发者根据具体业务场景选择最合适的事务管理策略。深入理解Spring声明式事务的工作原理,不仅能帮助开发者更高效地使用Spring...

    spring杂谈 作者zhang KaiTao

    1.1 Spring事务处理时自我调用的解决方案及一些实现方式的风险 1.2 我对AOP的理解 1.3 Spring开闭原则的表现-BeanPostProcessor的扩展点-1 1.4 我对IoC/DI的理解 1.5 SpringMVC + spring3.1.1 + hibernate4.1.0 集成...

    spring3 struts2 Mybatis3 组件注解 事务注解 实例

    spring3+struts2+Mybatis3 组件注解 事务注解 实例 下载运行 创建mysql数据库 增加innodb类型表TEST(id,name)两字段即可,测试通过

    Spring攻略PDF版

     第8章 Spring中的事务管理   第9章 Spring对ORM的支持   第10章 Spring MVC框架   第11章 整合Spring与其他Web框架   第12章 Spring对测试的支持  第三部分 高级主题  第13章 Spring ...

    spring2.5学习PPT 传智博客

    09_Spring如何装配各种集合类型的属性 10_使用构造器装配属性 11_用@Resource注解完成属性装配 12_编码剖析@Resource注解的实现原理 13.@Autowire注解与自动装配 14.让Spring自动扫描和管理Bean 15.使用JDK中...

    spring+springmvc+mybatis_增删查改+事务处理

    spring+springmvc+mybatis整合的web项目,前台数据处理使用的jQuery+AJAX实现,springmvc不是采用的modalAndview模式,统一采用返回JSON数据类型,方面快捷。 数据库:mySql,服务器:tomcat6, jdk1.6

    Spring的学习笔记

    (三) XML文件形式配置Spring事务管理 37 四、 HibernateTemplate 38 (一) HibernateTemplate 38 (二) HibernateDaoSupport 39 第十一课:Spring整合-SSH 40 一、 第一步:加入jar包(需要的jar包列表) 40 二、 第二步...

    Spring攻略中文版PDF

     第8章 Spring中的事务管理   第9章 Spring对ORM的支持   第10章 Spring MVC框架   第11章 整合Spring与其他Web框架   第12章 Spring对测试的支持  第三部分 高级主题  第13章 Spring ...

    spring.net中文手册在线版

    14.5.1.理解Spring.NET声明式事务管理的实现 14.5.2.第一个例子 14.5.3.Transaction特性的设置 14.5.4.通过AutoProxyCreator使用声明式事务 14.5.5.通过TransactionProxyFactoryObject使用声明式事务 14.5.6. 通过...

    Spring开发指南

    依赖注入的几种实现类型 Type1 接口注入 Type2 设值注入 Type3 构造子注入 几种依赖注入模式的对比总结 Spring Bean封装机制 Bean Wrapper Bean Factory ApplicationContext Web Context Spring 高级...

    Spring-Reference_zh_CN(Spring中文参考手册)

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.6.1. @Transactional 有关的设置 ...

    Spring攻略英文版(附带源码)

     第8章 Spring中的事务管理   第9章 Spring对ORM的支持   第10章 Spring MVC框架   第11章 整合Spring与其他Web框架   第12章 Spring对测试的支持  第三部分 高级主题  第13章 Spring Security...

    Spring 2.0 开发参考手册

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 插入事务操作 9.5.8. ...

    Spring面试题含答案.pdf

    48. Spring 支持的事务管理类型 49. Spring 框架的事务管理有哪些优点? 50. 你更倾向用那种事务管理类型? 51. 解释 AOP 52. Aspect 切面 53. 在 Spring AOP 中,关注点和横切关注的区别是什么? 54. 连接点 55. ...

    Spring中文帮助文档

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知...

    Spring API

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知...

Global site tag (gtag.js) - Google Analytics