@Transactional 主动回滚
时间: 2023-10-21 19:06:54 浏览: 49
@Transactional 注解可以用于控制事务的提交和回滚。当一个方法被 @Transactional 注解修饰时,如果该方法执行过程中发生了异常,则事务会自动回滚,即所有对数据库的操作都会撤销,回到该方法执行前的状态。
例如,以下代码中的 saveUser 方法使用了 @Transactional 注解,当插入用户数据时发生异常,事务会自动回滚,不会插入任何数据到数据库中。
```
@Service
public class UserService {
@Autowired
private UserDao userDao;
@Transactional
public void saveUser(User user) {
userDao.insertUser(user);
throw new RuntimeException("插入用户数据失败");
}
}
```
相关问题
@Transactional不回滚
@Transactional注解可以用于控制事务的提交和回滚。如果在@Transactional注解的方法中抛出了RuntimeException或Error,那么事务会回滚。但是如果抛出的是其他类型的异常,事务就不会回滚。此外,如果在@Transactional注解的方法中调用了其他带有@Transactional注解的方法,那么这些方法的事务也会受到控制。
如果你遇到了@Transactional不回滚的情况,可能是以下原因导致的:
1. 异常被catch住了,导致事务没有回滚。
2. 异常被try-catch后重新抛出了一个新的异常,而这个新的异常不是RuntimeException或Error类型。
3. 事务注解被放在了private方法上,因为Spring只能代理public方法,所以事务注解不会生效。
@Transactional 注解主动回滚
@Transactional注解可以用来标记一个方法需要在出现异常时进行事务的回滚。然而,有时候我们可能需要手动触发事务的回滚。为了实现手动回滚,我们可以使用两个步骤。首先,在注解上添加rollbackFor属性,指定需要回滚的异常类型,例如:@Transactional(rollbackFor=Exception.class)。其次,在我们自己的异常处理中手动触发回滚,可以使用如下代码:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();。这样,当我们捕获到异常时,就可以手动触发事务的回滚操作。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)