gpt4 book ai didi

java - Spring 事务不回滚

转载 作者:搜寻专家 更新时间:2023-10-31 20:17:43 25 4
gpt4 key购买 nike

我有这样的东西:

@Service
@Transactional
public class ServiceA {

@Autowired
SomeDAO1 dao1;

@Autowired
ServiceB serviceB;

public void methodServiceA() {

serviceB.someMethodThatRunsInsertIntoDB();
dao1.anotherMethodThatRunsInsertIntoDB();

}

}

@Service
@Transactional
public class ServiceB {

@Autowired
Dao2 dao2;

public void someMethodThatRunsInsertIntoDB() {
dao2.insertXXX();
}

}

我的问题是:如果 serviceB.someMethodThatRunsInsertIntoDB() 执行成功但 dao1.anotherMethodThatRunsInsertIntoDB() 抛出异常,serviceB 所做的更改> 不会回滚。我需要回滚这些更改,以防 dao1.anotherMethodThatRunsInsertIntoDB() 中发生异常。我该怎么做?

//已编辑

spring-servlet.xml中的事务配置

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
</property>
</bean>

如果一个 dao 使用 EntityManager 而另一个 dao 使用 JdbcTemplate 与 DB 交互是否相关?

//更新 -- EntityManager 配置

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
</bean>
</property>

最佳答案

您需要将检查异常的类型传递给 rollbackFor 参数。默认情况下,spring 回滚似乎只针对未经检查的异常。更多详情:Spring transaction: rollback on Exception or Throwable

关于java - Spring 事务不回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40173587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com