加了@Transactional(rollbackFor = Exception.class)但没有回滚事务
时间: 2023-08-17 10:16:28 浏览: 54
根据提供的引用内容,如果在方法a中调用了同一个类中的方法b,并且在方法b上加了@Transactional注解,但是事务没有回滚的话,可能是因为方法b没有被代理。在引用\[2\]中提到,如果在同一个类中调用方法b时,需要使用self.b()而不是直接调用b()。所以,你可以尝试在方法a中使用self.b()来调用方法b,这样事务应该会生效并且回滚。
#### 引用[.reference_title]
- *1* *2* *3* [@Transactional(rollbackFor = Exception.class) 不生效,没回滚](https://blog.csdn.net/changrj6/article/details/121077180)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
相关问题
@Transactional(rollbackFor = Exception.class)加在类上
在类上使用`@Transactional(rollbackFor = Exception.class)`注解的作用是指定在事务中发生异常时需要回滚的异常类型。如果不加`rollbackFor = Exception.class`,则默认情况下只有在发生未检查异常(即继承自`RuntimeException`的异常)时才会回滚事务,而对于检查异常(即继承自`Exception`但不继承自`RuntimeException`的异常),默认情况下是不会回滚事务的。
通过在类上加上`@Transactional(rollbackFor = Exception.class)`注解,可以确保无论是未检查异常还是检查异常,在事务中发生时都会触发回滚操作,保证数据的一致性和完整性。
范例:
```java
@Transactional(rollbackFor = Exception.class)
public class TransactionalClass {
// 类的方法
}
```
@Transactional(rollbackFor = Exception.class)
@Transactional(rollbackFor = Exception.class)是Spring框架中的一个注解,用于标记一个方法或类需要进行事务管理。它的作用是在方法执行过程中,如果发生异常,则会回滚事务,将数据恢复到事务开始之前的状态。
该注解可以用于方法级别和类级别。在方法级别上使用时,只有被注解的方法发生异常时才会回滚事务;在类级别上使用时,类中的所有方法都会受到该注解的影响。
需要注意的是,@Transactional默认只回滚RuntimeException及其子类的异常,而不会回滚Exception及其子类的异常。如果需要回滚Exception异常,可以使用@Transactional(rollbackFor = Exception.class)来指定回滚的异常类型。
以下是一个使用@Transactional(rollbackFor = Exception.class)的示例:
```java
@Transactional(rollbackFor = Exception.class)
public void updateData() throws Exception {
// 更新数据的代码
// 如果发生异常,事务会回滚
}
```