`

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支持两种事务管理方式:编程式事务管理和声明式事务管理。 1. **编程式事务管理**: 编程式事务管理通过在代码中直接调用`...

    Spring事务管理Demo

    Spring事务管理的目的是确保数据的一致性和完整性,尤其是在多操作、多资源的环境中。本Demo将深入探讨Spring如何实现事务的管理。 首先,Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 ...

    spring事务与数据库操作

    ### Spring事务与数据库操作 #### 一、Spring的声明式事务管理 在现代软件开发中,事务处理是非常关键的一部分,特别是在涉及多个数据操作时。Spring框架提供了强大的事务管理能力,可以方便地集成到应用程序中。...

    Spring事务流程图

    Spring事务管理是Spring框架的核心特性之一,主要用于处理应用程序中的数据一致性问题。在Spring中,事务管理分为编程式和声明式两种方式。本篇文章将详细解释Spring事务管理的流程,以及如何通过时序图来理解这一...

    spring事务详解

    Spring事务详解 Spring框架的事务管理功能是Java企业级开发中的重要组成部分,它将事务管理从具体的业务逻辑和数据访问逻辑中独立出来,实现了关注点分离。这种分离不仅降低了事务管理的复杂性,而且增强了代码的可...

    spring 事务基于注解模式

    Spring事务管理分为编程式和声明式两种。编程式事务管理通过编程的方式(如使用`TransactionTemplate`或直接调用`PlatformTransactionManager`)来控制事务的开始、提交、回滚等操作。而声明式事务管理则是在配置...

    Spring事务详解

    本文将深入探讨Spring事务管理的概念、类型、配置方式以及在实际开发中的应用。 首先,我们要理解什么是事务。事务是数据库操作的基本单元,它确保一组数据库操作要么全部成功,要么全部失败。事务有四大特性,即...

    Spring事务与Java事务比较

    此外,Spring 还提供了事务回滚规则,允许基于异常类型或异常实例来决定是否回滚事务,增强了事务处理的灵活性。 Spring AOP 用于实现事务管理服务,它通过代理模式在方法调用前后插入事务处理代码,无需修改原有...

    spring事务,xml方式和注解方式

    Spring事务管理是Spring框架的核心特性之一,主要用于处理应用程序中的数据一致性问题。在多线程、分布式系统中,事务管理显得尤为重要。本节将详细介绍Spring如何通过XML配置和注解方式来实现事务管理。 首先,...

    spring-tx事务管理实例

    Spring事务管理是企业级Java应用中不可或缺的一部分,它确保了数据的一致性和完整性,尤其是在多线程和分布式环境中。本实例将深入探讨Spring事务管理的实现与应用。 首先,Spring事务管理分为编程式事务管理和声明...

    spring 事务处理

    Spring 事务处理是Java开发中一个至关重要的概念,特别是在企业级应用中,它确保了数据的一致性和完整性。Spring 提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。本篇将深入探讨Spring声明式事务...

    spring事务管理

    Spring事务管理主要包括两种类型:编程式事务管理和声明式事务管理。 - **编程式事务管理**:通过编写代码来控制事务的开始、提交或回滚等操作。这种方式灵活度高,但会使得代码变得冗余且难以维护。 - **声明式...

    Spring事务传播类型.md

    Spring事务传播类型.md

    spring3.0两种事务管理配置

    事务管理的类型 Spring 中的事务管理可以分为两种:编程式事务管理和声明式事务管理。编程式事务管理是指通过编程的方式来管理事务,而声明式事务管理是指通过配置的方式来管理事务。 事务管理的隔离级别 Spring ...

    springboot整合spring事务

    而Spring事务管理是其核心特性之一,它为开发者提供了强大的事务处理能力,确保数据的一致性和完整性。本篇文章将深入探讨如何在Spring Boot中整合Spring事务管理,并详细阐述其关键概念和技术细节。 首先,了解...

    Spring事务管理4种方式

    本文将详细介绍Spring事务管理的四种方式:编程式事务管理、声明式事务管理、PlatformTransactionManager接口以及TransactionTemplate。 1. **编程式事务管理**:这是一种手动控制事务的方式,通过在代码中调用`...

    spring 自定义事务管理器,编程式事务,声明式事务@Transactional使用

    在Spring框架中,事务管理是核心功能之一,它确保了数据操作的一致性和完整性。本教程将深入探讨如何在Spring中实现自定义事务管理器...这将加深你对Spring事务管理的理解,帮助你在实际项目中更加熟练地运用这些技术。

    spring_事务管理(实例代码)

    Spring事务管理就是围绕这些特性来确保数据的一致性。 四、事务的传播行为 在Spring中,我们可以配置事务的传播行为,比如REQUIRED(默认,如果当前存在事务,则加入当前事务,否则新建一个事务)、PROPAGATION_...

    Spring 事务开发代码文件

    Spring事务管理对JDBC、Hibernate、MyBatis等数据访问技术有很好的支持,但对于非Java平台的数据访问技术(如存储过程),其管理能力有限。 在实际项目中,选择编程式还是声明式事务管理,需要根据项目的复杂度、...

Global site tag (gtag.js) - Google Analytics