当前位置: 首页 > 知识库问答 >
问题:

Spring事务不回滚异常

傅长恨
2023-03-14
<bean id="emfactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="persistenceUnitName" ref="default"/>
    <property name="jpaVendorAdaptor">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdaptor"/>
    </property>
    <property name="jpaProperties">
        <prop key="hibernate.show_sql">true</prop>
        <prop key="hibernate.dialect">com.xxx.xxx.xxx.xxx.SQLServer2012CustomDialect</prop>
    </property>
</bean>

<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="emfactory"/>
</bean>
@Transactional
public void save(Dto dto) throws Exception{
    dao.save(entity);
    throw new Exception();
}
@Transactional
public void save(Dto dto) throws Exception{
    dao.save(entity);
    throw new RunTimeException();
}

这很好,但并不总是在代码中抛出运行时异常。因此,我挖掘并发现如下所示的rollbackFor;

@Transactional(rollbackFor = Exception.class)
public void save(Dto dto) throws Exception{
    dao.save(entity);
    throw new Exception();
}

现在,我必须更改所有代码,以使用RollBackfor更改@Transactional。但是还有其他方法可以将所有@transaction advice属性更改为rollbackFor=exception.class吗?

共有1个答案

阎成天
2023-03-14

再看一下图像中的红色矩形:

对于@transactional,默认情况下只回滚未选中的异常,选中的异常默认情况下不会回滚。

这可能会解决你的问题:(看红色矩形)

<tx:advice id="txAdvice">
    <tx:attributes>
        <tx:method name="*" rollback-for="Throwable"/>
    </tx:attributes>
</tx:advice>
 类似资料:
  • 我正在使用Spring JpaRepository在我的一个应用程序屏幕中实现CRUD。作为其中的一部分,我正在开发一个功能,用户可以保存所有汽车实体或没有(应该回滚)到数据库。我不确定如何使用Spring Boot、Spring Rest和Spring JPA实现此功能。 下面是我的源代码。 除此之外,我还得到了一个类似 请帮帮我。谢谢你。

  • 我们有一个Spring事务回滚问题,其中回滚似乎不起作用 在用注释的服务层方法中,我调用三个不同的类来插入3条记录 中间插入从第四个表执行get以填充描述字段,但此get失败。我希望第一次插入会回滚,但它似乎没有发生 几点: 获取方法抛出运行时异常 我们使用和中定义的。Bean是在中创建的,它被导入到 在层 中没有 注释 我们已经使用了

  • 我在tomcat服务器中使用具有多个数据源配置的JTA原子事务。有时我会遇到以下异常: JTA事务意外回滚(可能是由于超时);嵌套的异常是javax。交易回滚异常:事务被设置为仅回滚 出现这种异常的原因是什么?

  • 我有一个RESTFul服务(由泽西实施)。服务用@Transactional标记。 我声明了一个ExceptionMapper,如下所示: 未声明exceptionmapper时,事务将回滚。然而,当我有一个ExceptionMapper时,事务是提交而不回滚。 我假设事务未回滚的原因是,当异常被ExceptionMapper捕获时,spring事务代理dosnt检测到异常被抛出,因此事务未回滚。