java - 如果抛出异常,@Transactional 不起作用

标签 java mysql spring jpa spring-boot

这是我的 Spring Boot 应用程序:

@SpringBootApplication
@EnableTransactionManagement(proxyTargetClass=true) 
public class WhizhopApplication {

public static void main(String[] args) {
    
    SpringApplication.run(WhizhopApplication.class, args);
 }
}

这是我的服务:

@Service
public class OrderService {
  @Autowired
   BillRepository billRepo;

    @Transactional(rollbackFor = Exception.class)
    public BaseDTO saveKot(BillDTO billDto) {
     try {
        //business logic
        billRepo.save();
     } catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        
    }
   }
}

如果发生任何异常,事务不会回滚。

最佳答案

如果您希望使用 @Transactional 处理异常,则不应捕获异常。

另请注意:

  1. @Transactional 仅适用于公共(public)方法
  2. Spring’s @Transactional does not rollback on checked exceptions

关于java - 如果抛出异常,@Transactional 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49378404/

相关文章:

java - Java 7 是否有办法将文件放入回收站而不是在 Windows 上删除

mysql - 如何删除触发器内的行?

Php mysql 搜索选项

java - Spring NoClassDefFoundError:错误的名称

java - 云应用程序使用多个架构还是单个架构?

spring - 使用 Spring MVC Test 对多部分 POST 请求进行单元测试

java - 如何在 java 中正确格式化 JSON 字符串?

java - 如何正确显示对象内对象的数据?

java - 抽象类持有成员字段还是使用具体实现的Getter()?

php - 尝试为用户显示@mentions,但我的查询出现错误