首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring @Transactional调用抽象超类方法抛出org.hibernate.HibernateException

Spring @Transactional是Spring框架中用于管理事务的注解。它可以应用在方法或类级别上,用于标识需要进行事务管理的方法或类。

当使用Spring @Transactional注解时,如果在调用抽象超类方法时抛出org.hibernate.HibernateException异常,事务将如何处理呢?

首先,需要了解一下事务的特性。事务具有ACID特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。在默认情况下,Spring的事务管理器会将RuntimeException和Error视为回滚异常,而将其他异常视为提交异常。

对于抽象超类方法抛出的org.hibernate.HibernateException异常,根据默认的事务管理策略,事务将会回滚。这意味着在异常抛出后,事务将会被回滚到方法调用之前的状态,之前的数据库操作将被撤销。

在处理这种情况时,可以根据具体需求进行定制化的事务管理策略。可以使用Spring的编程式事务管理或声明式事务管理来实现。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 云数据库 MySQL:https://cloud.tencent.com/product/cdb_mysql
  • 云数据库 PostgreSQL:https://cloud.tencent.com/product/cdb_postgresql
  • 云数据库 SQL Server:https://cloud.tencent.com/product/cdb_sqlserver
  • 云数据库 MongoDB:https://cloud.tencent.com/product/cdb_mongodb

以上是对于Spring @Transactional调用抽象超类方法抛出org.hibernate.HibernateException异常的完善和全面的答案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

springMvc4+hibernate4的一个奇葩的网上众说纷纭的错误

springMvc4+hibernate4项目运行报错如下: org.hibernate.HibernateException: Could not obtain transaction-synchronized...-- 配置 Annotation 驱动,扫描@Transactional注解的定义事务 --> <tx:annotation-driven transaction-manager="transactionManager...使用 hibernate4,在不使用OpenSessionInView模式时,在使用getCurrentSession()时会有如下问题: 当有一个<em>方法</em>list 传播行为为Supports,当在另一个<em>方法</em>...getPage()(无事务)<em>调用</em>list<em>方法</em>时会<em>抛出</em><em>org.hibernate.HibernateException</em>: No Session found for current thread 异常。...这是因为getCurrentSession()在没有session的情况下不会自动创建一个,不知道这是不是<em>Spring</em>3.1实现的bug,欢迎大家讨论下。 <!

56070

Java抽象及子类实例化顺序和方法调用顺序测试

测试目的 验证抽象及子类实例化顺序; 验证抽象是否可以在子类未实例化时调用子类实现的抽象方法; 验证java的多态性 实例 抽象: package com.secbro.test.abstractInit...Plant a Banana Eat a Banana 实例化子类 Banana 实例化父 Plant a Orange Eat a Orange 实例化子类 Orange 结果分析 查看子类、抽象的构造方法打印结果可知...,实例化子类时先实例化父。...在抽象的构造方法调用了自己未实现的抽象方法,那么对应实例化的子类实现了此方法,在抽象实例化之后,子类未实例化之前,抽象可以调用子类实现的抽象方法。...不同的实例化打印不同的抽象方法实现,java多态的一种表现形式。

81330
  • 掌握 @transactional 注解@Transactional 注解管理事务的实现步骤Spring 的注解方式的事务实现机制

    级别配置了@Transactional方法级别也配置了@Transactional,应用程序会以方法级别的事务属性信息来管理事务,换言之,方法级别的事务属性信息会覆盖级别的相关配置信息。...Spring 的注解方式的事务实现机制 在应用系统调用声明@Transactional 的目标方法时,Spring Framework 默认使用 AOP 代理,在代码运行时生成一个代理对象,根据@Transactional...避免 Spring 的 AOP 的自调用问题 在 Spring 的 AOP 代理下,只有目标方法由外部调用,目标方法才由 Spring 生成的代理对象来管理,这会造成自调用问题。...若同一中的其他没有@Transactional 注解的方法内部调用有@Transactional 注解的方法,有@Transactional 注解的方法的事务被忽略,不会发生回滚。...上面的两个问题@Transactional 注解只应用到 public 方法和自调用问题,是由于使用 Spring AOP 代理造成的。

    87060

    最近线上面试,遇到了个使用GPT大模型面试的

    我听的不太清楚”一的,支支吾吾拖延时间,十来秒之后又什么问题都能答上来。 随后了不起特地问了个跨行业的技术问题(电力通讯),他不知道纲了,但是也在支支吾吾十来秒后回答上了。...在Spring中,声明式事务管理通常使用@Transactional注解来实现。这个注解可以应用到级别或方法级别,用于指定事务的行为。...(InnoDB) 同一个中,没有事务的A方法调用了带事务的B方法,而你直接使用的是A方法,即:当在一个事务方法内部调用同一个中的另一个事务方法时,外部方法的事务不会传播到内部方法,除非使用了特定的传播行为...由于它们都在同一个中,所以internalCreateUser方法的事务配置不会生效。如果internalCreateUser方法抛出异常,事务不会回滚。...解决方案:将internalCreateUser方法移到另一个服务中,或者使用@Transactional(propagation = Propagation.REQUIRES_NEW)来确保每个方法都有独立的事务

    5610

    Java异常总结和Spring事务处理异常机制浅析

    Thorwable所有异常和错误的,有两个子类Error和Exception,分别表示错误和异常。...该方法调用者也必须检查处理抛出的异常。如果所有方法都层层上抛获取的异常,最终JVM会进行处理,处理也很简单,就是打印异常消息和堆栈信息。...如果抛出的是Error或RuntimeException,则该方法调用者可选择处理该异常。有关异常的转译会在下面说明。...仅当抛出了检查异常,该方法调用者才必须处理或者重新抛出该异常。当方法调用者无力处理该异常的时候,应该继续抛出,而不是囫囵吞枣一般在catch块中打印一下堆栈信息做个勉强处理。...Spring事务回滚与异常 Spring被事务管理的方法,需要抛出非检查异常,即运行期异常才能进行回滚 对非检查型异常可以不用捕获,而检查型异常则必须用try语句块进行处理或者把异常交给上级方法处理总之就是必须写代码处理它

    1.2K40

    工作 6 年,@Transactional 注解用的一塌糊涂

    事务范围过大 有些同学为了省事直接将 @Transactional 注解加在了上或者抽象上,这样做导致的问题就是内的方法抽象的实现中所有方法全部都被事务管理。...同类内部方法间的调用是 @Transactional 注解失效的重灾区,网上你总能看到方法内部调用另一个同类的方法时,这种调用是不会经过代理的,因此事务管理不会生效。但这说法比较片面,要分具体情况。...,并且在同类中调用了非事务方法 a() 和事务方法 b(),当 b() 抛出异常时,a() 和 b() 的事务都不会生效。...要想 b() 方法的事务生效也容易,最简单的方法将它剥离放在独立的Service注入使用,交给spring管理就行了。...,例如 testMerge() 方法未开启事务调用 testB() 方法,那么将抛出异常;testMerge() 开启事务调用 testB() 方法,则加入当前事务。

    18610

    三问Spring事务:解决什么问题?如何解决?存在什么问题?

    下面我们看下Spring事务中定义的抽象接口。...声明式事务原理 Spring事务会为@Transaction标注的方法生成AOP增强的动态代理对象,并且在调用目标方法的拦截链中加入TransactionInterceptor进行环绕增加,实现事务管理...3.2 自调用失效 当通过在Bean的内部方法直接调用带有@Transactional方法时,@Transactional将失效,例如: public void saveAB(A a, B b) {...public void saveB(B b) { dao.saveB(b); } 在saveAB中调用saveA和saveB方法,两者的@Transactional都将失效。...这是因为Spring事务的实现基于代理,当在内部直接调用方法时,将不会经过代理对象,而是直接调用目标对象的方法,无法被TransactionInterceptor拦截处理。

    94420

    Spring事务为什么会失效?

    「统一的事务抽象」 基于这些问题,Spring抽象了一些事务相关的顶层接口。无论是全局事务还是本地事务,JTA,JDBC还是Hibernate,Spring都使用统一的编程模型。...「下图为Spring事物抽象的核心」 常用api 接口 PlatformTransactionManager 对事务进行管理 TransactionDefinition 定义事务的相关属性,例如隔离级别...筛选的逻辑我们就先不分析了,后面会再简单提一下 我们来看针对事务增强的逻辑,当执行被@Transactional标记的方法时,会调用到如下方法(TransactionInterceptor#invoke...方法调用@Transactional方法会发生什么?)...因为声明式事物是通过目标方法是否抛出异常来决定是提交事物还是会滚事物的 自调用 当自调用时,方法执行不会经过代理对象,所以会导致事务失效 // 事务失效 @Service public class UserServiceV2Impl

    48841

    发现一个Spring事务的巨坑bug,可是官方都不承认?大家来评评理!

    final的 3.方法内部调用 4.当前实体没有被spring管理 5.错误的spring事务传播特性 6.数据库不支持事务 7.自己吞掉了异常 8.抛出的异常不正确 9.多线程调用 10.嵌套事务多回滚了...AbstractFallbackTransactionAttributeSource的computeTransactionAttribute方法中有个判断,如果目标方法不是public,则TransactionAttribute...直接调用事务方法updateStatus。...从前面介绍的内容可以知道,updateStatus方法拥有事务的能力是因为spring aop生成代理了对象,但是这种方法直接调用了this对象的方法,所以updateStatus方法不会生成事务。...);     } } 我们可以看到UserService没有定义@Service注解,即没有交给spring管理bean实例,所以它的add方法也不会生成事务。

    52410

    如何将 @Transactional 事务注解运用到炉火纯青?

    Spring的事务边界是在调用业务方法之前开始的,业务方法执行完毕之后来执行commit or rollback(Spring默认取决于是否抛出runtimeException)。...哈哈~ ---- 第一点要注意的就是在@Transactional注解的方法中,再调用本类中的其他方法method2时,那么method2方法上的@Transactional注解是不!会!生!效!的!...小结只要方法transactionalMethod上有注解,并且方法1和方法2都处于当前事务中(不使用代理调用方法1和方法2上的@Transactional注解是不生效的;使用代理,需要方法1和方法2...如果想要方法1和方法2均单独保持事务一致性怎么办呢,刚说过了,如果不是用代理调用@Transactional注解是不生效的,所以一定要使用代理调用实现,然后让方法1和方法2分别单独开启新的事务,便OK啦...注解保证的是每个方法处在一个事务,如果有try一定在catch中抛出运行时异常。

    26120

    spring aop实例讲解_java swing 教程

    按照软件重构的思想,如果多个中出现重复的代码,就应该考虑定义一个共同的抽象,将这些共同的代码提取到抽象中,比如Teacher,Student都有username,那么就可以把username及相关的...AOP术语 连接点(Joinpoint) 程序执行的某个特定位置,如某个方法调用前,调用后,方法抛出异常后,这些代码中的特定点称为连接点。...2,AOP分两,一可以对方法的参数进行拦截,一是对方法进行拦截,SpringAOP属于后者,所以Spring的AOP是属于方法级的 4....,用getBean方法必须cast为接口类型,不能为该类的类型 带有@Transactional标注的所有的任意方法: @within(org.springframework.transaction.annotation.Transactional...(org.springframework.transaction.annotation.Transactional) @within和@target针对的注解,@annotation是针对方法的注解

    37820

    Java的@Transactional事务回滚

    @Transactional 基本原理概述 在应用系统调用声明@Transactional 的目标方法时,Spring Framework 默认使用 AOP 代理,在代码运行时生成一个代理对象,根据@Transactional...@Transactional 只能被应用到public方法上, 对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能 2.Spring团队的建议是你在具体的...(或方法)上使用 @Transactional 注解,而不要使用在所要实现的任何接口上。...Spring AOP 代理下,只有目标方法由外部调用,目标方法才由 Spring 生成的代理对象来管理,这会造成自调用问题。...若同一中的其他没有@Transactional 注解的方法内部调用有@Transactional 注解的方法,有@Transactional 注解的方法的事务被忽略,不会发生回滚。

    2.2K30

    @Transactional事务几点注意及其属性Propagation的使用

    不要在接口上声明@Transactional ,而要在具体方法上使用 @Transactional 注解,否则注解可能无效。...2.不要图省事,将@Transactional放置在级的声明中,放在声明,会使得所有方法都有事务。...3.使用了@Transactional方法,对同一个里面的方法调用, @Transactional无效。...比如有一个Test,它的一个方法A,A再调用Test本类的方法B(不管B是否public还是private),但A没有声明注解事务,而B有。则外部调用A之后,B的事务是不会起作用的。...(经常在这里出错) 4.使用了@Transactional方法,只能是public,@Transactional注解的方法都是被外部其他调用才有效,故只能是public。道理和上面的有关联。

    1.4K20

    10 种 Spring 事务失效的常见场景,你知道几个?

    =Propagation.NEVER) //如果其他bean调用这个方法, 在其他bean中声明事务, 那就用事务, 如果其他bean没有声明事务, 那就不用事务 @Transactional(propagation...、接口方法以及方法上,它可以通过不同的参数来选择什么类型Exception异常下执行回滚或者不回滚操作。...事务方法未被Spring管理 如果事务方法所在的没有注册到Spring IOC容器中,也就是说,事务方法所在并没有被Spring管理,则Spring事务会失效,举个例子: public class...但如果某个方法用final修饰了,那么在它的代理中,就无法重写该方法,从而无法添加事务功能。这种情况事务就会在Spring中失效。...同一个中的方法相互调用 @Service public class OrderServiceImpl extends ServiceImpl implements

    1.2K20

    Transaction 注解

    @Transaction 参考 Transaction事务属性 在同一个中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解失效的原因和解决方法 Spring...中 @Transactional 配置 引入命名空间 在 Spring 配置文件中 引入 命名空间 <beans xmlns="http://www.springframework.org...noRollbackForClassName <em>类</em>名数组,必须继承自Throwable 不会导致事务回滚的异常<em>类</em>名字数组 <em>Spring</em> 中 @<em>Transactional</em> 的传播行为和隔离级别 不同的位置使用...标注在<em>类</em>前:表示<em>类</em>中的所有<em>方法</em>都进行事务处理 标注在接口、实现<em>类</em>的<em>方法</em>前:表示<em>方法</em>进行事务处理 事务传播行为 注释 作用 @<em>Transactional</em>(propagation=Propagation.REQUIRED...bean<em>调用</em>这个<em>方法</em>,在其他bean中声明事务,那就用事务。

    79110

    Spring声明式事务、编程式事务一文打尽

    你应该几乎从不会使用这个,除非当前的代码必须通过一个标准的JDBC数据源接口调用实现。在这个场景中,这些代码是有用的,但是它参与了Spring管理的事务。你可以使用高级的抽象编写新的代码。...这意味着自身调用(实际上,目标对象的一个方法调用该目标对象的另一个方法)在运行时是不会产生真实事务的,即使被调用方法被@Transactional标注了。...更多关于通知顺序的信息可以参考Spring AOP ??? 默认处理@Transactional注解的通知模式是proxy,只允许通过代理拦截调用。同一内的本地调用不能以这种方式被拦截。...方法的@Transactional注解指定了中的public方法的默认的事务语义。 方法的@Transactional注解覆盖了中(如果指定了的话)的事务语义。...中自带的一个事务回调实现抽象 事务回调中的代码可以调用TransactionStatus的 setRollbackOnly()方法回滚事务: transactionTemplate.execute(new

    94900

    spring(基础24) Spring注解@Transactional配置事务

    @Transactional 可以作用于接口、接口方法以及方法上。...虽然 @Transactional 注解可以作用于接口、接口方法以及方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。...默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰。...3.使用了@Transactional方法,对同一个里面的方法调用, @Transactional无效。...(经常在这里出错) 4.使用了@Transactional方法,只能是public,@Transactional注解的方法都是被外部其他调用才有效,故只能是public。道理和上面的有关联。

    68820

    一口气说出 6种,@Transactional注解的失效场景

    @Transactional 可以作用在接口、方法。 作用于:当把@Transactional 注解放在上时,表示所有该类的public方法都配置相同的事务属性信息。...作用于方法:当配置了@Transactional方法也配置了@Transactional方法的事务会覆盖的事务配置信息。...,导致@Transactional失效 开发中避免不了会对同一个里面的方法调用,比如有一个Test,它的一个方法A,A再调用本类的方法B(不论方法B是用public还是private修饰),但方法A...其实这还是由于使用Spring AOP代理造成的,因为只有当事务方法被当前以外的代码调用时,才会由Spring生成的代理对象来管理。...spring的事务是在调用业务方法之前开始的,业务方法执行完毕之后才执行commit or rollback,事务是否执行取决于是否抛出runtime异常。

    1.6K11

    关于spring事务你需要知道的知识点

    那如果没有这个代理,真的事务就不会生效吗?把测试代码改一下,不再依赖spring注入,我们自己来创建实例对象。...Modifier.isPublic(method.getModifiers())) { return null; } else { // 其他逻辑 } } 这是个抽象...3)在同一个调用方法 还是简单的代码,讲的是同一个调用方法,这个方法有@Transactional。...原因估计还是出在代理上,和第一条不同的是,代理虽然有代理,但insert方法直接调用了insert2方法,这个是目标中自己调用的,所以事务没有生效。...自己写了try...catch...的话,要么自己手动提交回滚,要么就是再抛出一个非检查异常。 三、事务的传播机制 事务的传播机制,简单的来说,就是一个方法调用另一个方法

    30820
    领券