首页
学习
活动
专区
圈层
工具
发布

Spring事务中嵌套事务的实现和示例

在Spring事务中,嵌套事务是通过事务传播行为和可选的事务管理器来实现的。...嵌套事务是指一个事务中包含了另一个事务,在外层事务的范围内,内层事务可以单独进行提交或回滚,并且外层事务的提交或回滚不会受到内层事务的影响。...// ... }}在上述代码中,外层事务由outerMethod()方法表示,并通过@Transactional注解来定义事务的属性。...在执行到innerService.innerMethod()时,会调用内层服务的innerMethod()方法,此时内层事务会在外层事务的范围内开启。...在内层事务的执行过程中,如果发生异常,内层事务会被回滚,但外层事务仍然继续执行。最后,根据外层事务的提交或回滚决定是否将外层事务及其包含的内层事务一起提交或回滚。

1.7K91

Spring Boot JPA 中transaction的使用

Spring Boot JPA 中transaction的使用 transaction是我们在做数据库操作的时候不能回避的一个话题,通过transaction,我们可以保证数据库操作的原子性,一致性,隔离性和持久性...本文我们将会深入的探讨Spring Boot JPA中@Transactional注解的使用。...@Transactional的实现 Spring通过创建代理或者操纵字节码来实现事物的创建,提交和回滚操作。如果是代理模式的话,Spring会忽略掉@Transactional的内部方法调用。...如果放在方法上面,那么该方法中的所有public方法都会应用该Transaction。 如果@Transactional放在private方法上面,则Spring Boot将会忽略它。...如果没有则创建,如果有transaction,则Spring将会把该放方法的业务逻辑附加到已有的transaction中。

3.4K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JavaEE - JPA(2):EJB中的事务管理

    加上同时代兴起的spring Framework等轻量级的JavaEE解决方案,就算到了如今EJB 3.x时代,各方面都进步了不少,但还是有不少人拿有色眼睛看待它的。...也就是说,这个方法内对于资源的操作的提交以及回滚都和调用栈中其它事务无关。 SUPPORTS: 运行的当前方法对于又没有事务采取一种”无所谓”的态度。有也可以,没有也可以。...因此可以推断出在此方法中定义的逻辑通常和资源没有太大的关系。 NOT_SUPPORTED: 运行的当前方法对事务有”消极”的态度。...如果发现了处于active状态的事务,会尝试让容器挂起(suspend)该事务。因此也可以推断出在此方法中定义的逻辑通常和资源没有太大的关系。...不像CMT那样通常以业务方法的开始和结束作为事务的起点和终点。如果只开始了一个事务,而忘记关闭它,那么会导致异常的发生,同时该事务也会被容器回滚。 而且,BMT类型的事务无法使用从外部进入的事务。

    1.3K10

    Spring 中实现事务的方式

    Spring 并不直接支持事务,只有当数据库支持事务时,Spring 才支持事务,Spring 只不过简化了开发人员实现事务的步骤。 Spring 提供了两种方式实现事务。 声明式和编程式。...但是,如果程序中用到大力的事务操作,声明式事务方式更适合,它使得事务管理和业务逻辑分离。...对@Configuration 类会特殊处理;dataSource() 方法虽然在 jdbcTemplate 方法和 transactionManager 方法中调用,但是实际返回的都是容器中的那个对象...,都是同一个对象,这就保证了 JDBCTemplate 和事务操作所用的数据源是同一个。...编程式实现方式 对于编程式实现的事务管理方式,Spring 也提供两种方法实现: 使用 TransactionTemplate 和使用 PlatformTransactionManager。

    3.9K30

    快速学习-Spring Data JPA中的多表查询

    第5章 Spring Data JPA中的多表查询 5.1 对象导航查询 对象图导航检索方式是根据已经加载的对象,导航到他的关联对象。它利用类与类之间的关系来检索对象。...例如:我们通过ID查询方式查出一个客户,可以调用Customer类中的getLinkMans()方法来获取该客户的所有联系人。对象导航查询的使用要求是:两个对象之间必须存在关联关系。...问题,将操作配置到同一个事务中 @Transactional public void testFind() { Customer customer = customerDao.findOne(...通过配置的方式来设定,只要查询从表实体,就把主表实体对象同时查出来 配置方式 /** * 在联系人对象的@ManyToOne注解中添加fetch属性 * FetchType.EAGER :...> query, CriteriaBuilder cb) { //Join代表链接查询,通过root对象获取 //创建的过程中,第一个参数为关联对象的属性名称,第二个参数为连接查询的方式

    3.6K10

    Spring中事务的传播行为

    当我们在spring中调用Service中一个方法时,如果我们默认配置了对Service的事务管理,那么此时的Service将运行在一个由spring管理的事务环境中。...由于在我们日常的开发时,通常会在一个Service接口中调用其它Service中的接口以此来完成一个完整的事务操作,这时就会发生服务接口嵌套调用的情况,spring通过事务传播行为控制当前事务如何传播到被嵌套调用的目标服务接口方法中的...虽然我们不会直接采用编码的方法进行事务管理,但在spring中还是提供了对该方法的支持。...在spring中声明式事务管理是通过spring AOP的功能实现的。具体的流程是通过事务的声明信息,spring负责将事务管理增强逻辑动态织入到业务方法的相应连接点中。...我们可以看到,采用xml管理事务和直接用编码的方法有很大的不同的,在接口的实现类中只有相关的业务代码,并不会有任何相关事务的代码,而用直接编码的方法则必须手动的将管理事务的代码编写在接口的实现类中。

    1.8K40

    JavaEE - JPA(1):事务的基础概念

    这个ACID就是用来描述事务的特点的。虽然我们在后面的讨论中会发现尽管JavaEE应用中的事务通常都是满足ACID几个特点的。但是随着技术的发展和更迭,并不是所有的事务都能够满足ACID。...JavaEE中的事务 既然本文是作为介绍和讨论JPA的首篇文章,那么就必然需要提及JavaEE环境下的事务。毕竟JPA也只是JavaEE整体生态环境下的一个用于描述数据持久化的规范而已。...这是最基本的事务类型,直接和JDBC的DataSource接口打交道,因此本质上而言它就是数据库事务。所以即使不在JavaEE这个环境下,比如JavaSE中也是能够使用这种事务类型的。...归纳一下就是下面的两种方案: 使用JTA接口在应用中编码完成显式划分 在容器的帮助下完成自动划分 由于JPA作为JavaEE规范的一部分,对同属于JavaEE规范中的EJB作了充分考虑,因此对于EJB而言...在下一篇文章中将继续介绍事务划分在EJB以及Spring中的具体实现方式。 参考链接: http://www.importnew.com/22559.html

    62920

    Spring事务专题(四)Spring中事务的使用、抽象机制及模拟Spring事务实现

    事务专题大纲 「对于专题大纲我又做了调整哈,主要是希望专题的内容能够更丰富,更加详细」,本来是想在源码分析的文章中附带讲一讲事务使用中的问题,这两天想了想还是单独写一篇并作为事务专题的收尾篇,也是我Spring...boolean hasSavepoint(); // 这个方法复写了父接口Flushable中的方法 // 主要用于刷新会话 // 对于Hibernate/jpa而言就是调用了其session/entityManager...Spring中事务的同步机制 Spring中事务相关的同步机制可以分为两类 资源的同步 行为的同步 什么是资源的同步呢?...,大家把代码拷贝过去自行测试就好了 总结 本文主要介绍了Spring中的事务相关内容,对Spring中的事务抽象机制做了介绍,主要是为了让大家在接下来一篇源码文章中能减轻负担,希望大家可以根据自己理解动手模拟下...Spring中事务的实现哦,当你自己去实现的时候肯定会碰到一系列的问题,然后带着这些问题看源码你才能知道Spring为什么要做这些事情!

    1.5K20

    JPA、Hibernate、Spring Data JPA 的关系,你懂吗?

    为我们提供了: 1)ORM映射元数据:JPA支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中; 如:@Entity、@Table、@Column、...2)JPA 的API:用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。...spring data jpa是spring提供的一套简化JPA开发的框架,按照约定好的【方法命名规则】写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。...同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查询等等。 Spring Data JPA 可以理解为 JPA 规范的再次封装抽象,底层还是使用了 Hibernate 的 JPA 技术实现。...如图: 接口约定命名规则: 实例: springboot集成spring data jpa只需两步: 第一步:导入maven坐标 第二步:yml配置文件中配置jpa信息 --END-- 关注Java技术栈微信公众号

    2.8K30

    Spring Data JPA 的时间注解:@CreatedDate 和 @LastModifiedDate

    选择 Spring Data JPA 框架开发时,常用在实体和字段上的注解有@Entity、@Id、@Column等。在表设计规范中,通常建议保留的有两个字段,一个是更新时间,一个是创建时间。...Spring Data JPA 提供了相应的时间注解,只需要两步配置,就可以帮助开发者快速实现这方面的功能。...在实体类上加上注解 @EntityListeners(AuditingEntityListener.class),在相应的字段上添加对应的时间注解 @LastModifiedDate 和 @CreatedDate...在Application启动类中添加注解 @EnableJpaAuditing @EnableJpaAuditing @SpringBootApplication public class TestApplication...Data JPA 还提供 @CreatedBy 和 @LastModifiedBy 注解,用于保存和更新当前操作用户的信息(如id、name)。

    6.9K30

    Spring Data JPA 的应用

    一、Spring Data JPA 概述 1、什么是 Spring Data JPA Spring Data JPA 是应用于Dao层的一个框架,简化数据库开发的,作用和MyBatis框架一样,但是在使用方式和底层机制是有所不同的...Spring Data JPA 是 Spring 基于JPA 规范的基础上封装的一套 JPA 应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作。它提供了包括增删改查等在内的常用功能!...2、Spring Data 家族 二、Spring Data JPA,JPA规范和Hibernate之间的关系 Spring Data JPA 是 Spring 提供的一个封装了JPA 操作的框架,而...JPA 是一套规范,内部是由接口和抽象类组成的。...,使用 JPA 注解配置映射关系 /** * 简历实体类(在类中要使用注解建立实体类和数据表之间的映射关系以及属性和字段的映射关系) * 1、实体类和数据表映射关系 * @Entity * @Table

    39210

    【转载】Spring 中,事务的传播方式

    Spring 事传播行为: spring 特有的事务传播行为,spring 支持 7 种事务传播行为,确定客户端和被调用端的事务边界(说得通俗一点就是多个具有事务控制的 service 的相互调用时所形成的复杂的事务边界控制...(如果被调用端发生异常,那么调用端和被调用端事务都将回滚) PROPAGATION_SUPPORTS(XML 文件中为 SUPPORTS) 表示当前方法不必需要具有一个事务上下文,但是如果有一个事务的话...(XML 文件中为 NESTED) 表示如果当前方法正有一个事务在运行中,则该方法应该运行在一个嵌套事务中,被嵌套的事务可以独立于被封装的事务中进行提交或者回滚。...方法有事务并且执行过程中抛出异常,则 A.methoda()和 B.methodb()执行的操作被回滚; 3、如果 A 的 methoda() 方法有事务,则 B.methodB() 抛出异常时,A 的...业务需要扣款操作和创建订单操作同成功或者失败,因此,charger() 和 order() 的事务不能相互独立,需要包含在 chargeHandle() 的事务中; 通过以上需求,可以给 charge(

    98920

    spring data jpa @Query注解中delete语句报错 : @Modifying注解的使用spring data jpa @Query注解中delete语句报错

    spring data jpa @Query注解中delete语句报错 项目中需要删除掉表中的一些数据 @Query("delete from EngineerServices es where es.engineerId...,对于执行update和delete语句需要添加@Modifying注解 @Modifying @Query("delete from EngineerServices es where es.engineerId...@Query注解里面的value和nativeQuery=true,意思是使用原生的sql查询语句. sql模糊查询like语法,我们在写sql的时候是这样写的 like '%?...%' 但是在@Query的value字符串中, 这样写 like %?...1% 另外,要注意的是: 对于执行update和delete语句需要添加@Modifying注解 */ interface ImageRepository : PagingAndSortingRepository

    2.9K10

    MySQL中的事务和事务隔离级别

    要想保证以上的两条DML语句同时成功或者同时失败,那么就需要使用数据库的“事务机制”。 事务可以保证多个操作原子性,要么全成功,要么全失败。...对于数据库来说事务保证批量的DML要么全成功,要么全失败。 事务的四个特征ACID 原子性(Atomicity) 整个事务中的所有操作,必须作为一个单元全部完成(或全部取消)。...持久性(durability) 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。 事务相关的语句只有:DML语句。...因为它们这三个语句都适合数据库表当中的“数据”相关的。事务的存在是为了保证数据的完整性,安全性。 假设所有的业务的都能使用一条DML语句搞定,还需要事务机制吗? 不需要事务。...) 提交事务或者回滚事务(结束) 事务之间的隔离级别 事务隔离性存在隔离级别,理论上隔离级别包括四个: 第一级别:读未提交(read uncommitted) 对方事务还没有提交,我们当前事务可以读取到对方未提交的数据

    1.4K20

    MySQL中事务的流程和XA事务的特点

    执行事务操作:在事务块中,可以执行一系列的数据库操作,包括插入、更新、删除等。这些操作可以是简单的单个语句,也可以是复杂的事务嵌套。...事务流程的核心思想是将多个需要一起执行的操作视为一个整体,保证其在数据库中的一致性和完整性。如果在事务执行过程中发生了错误,可以通过回滚操作来保证数据的一致性,否则可以通过提交操作来永久保存修改。...MySQL的XA事务和普通事务有什么不同?MySQL中的XA事务是分布式事务,涉及多个独立的资源管理器,其中每个资源管理器可以是不同的数据库或系统。...原子性和持久性:XA 事务确保跨多个资源管理器的原子性和持久性。 这意味着事务所做的所有更改要么在所有资源管理器上提交,要么在所有资源管理器上回滚,从而确保事务一致性。...在常规事务中,原子性和持久性在单个数据库内得到保证。两阶段提交:XA 事务使用两阶段提交协议来协调跨多个资源管理器的更改的提交或回滚。

    83761

    6 ElasticsearchTemplate和JPA中ElasticsearchRepository的选择

    通过前面的文章可以知道,JPA中有个ElasticsearchRepository可以做Elasticsearch的相关增删改查,用法和普通的CRUDRepository是一样的,这样就能统一ElasticSearch...和普通的JPA操作,获得和操作mysql一样的代码体验。...但是同时可以看到ElasticsearchRepository的功能是比较少的,简单查询够用,但复杂查询就不够了。...而ElasticsearchTemplate则提供了更多的方法来完成更多的功能,也包括分页之类的,他其实就是一个封装好的ElasticSearch Util功能类,通过直接连接client来完成数据的操作...如https://stackoverflow.com/questions/28897404/spring-data-elasticsearchs-elasticsearchtemplate-vs-elasticsearchrepository

    2.2K20
    领券