spring boot 中的@Transactionnal 注释是否真的创建了一个事务?

@Transactionnal annotation in spring boot does it really create a transaction?

我想在一个方法中调用与我的数据库交互的不同方法。

像这样:

@Autowired
EnteteService es; // service for jpaRepository 

@Autowired
SystemOracleServiceJpa so; // service using  jdbcTemplate

@Autowired
DetailService ds; // service for jpaRepository 


@Transactional
public void configure(EnteteAR entete) throws ConfigurationException {
    try{
        
        this.es.save(entete); // first methode 
        List<DetailAR> details = this.so.getStructure(entete.getTableName());
        if(details.size()>0){
                this.ds.saveAllDetails(details); // second  
                this.so.CreateTable(details, entete.getTableName(), "DEM");//third 
                this.so.createPkIdxDem(entete.getTableName()); // fourth 
                this.so.CreateTable(details, entete.getTableName(), "BACK"); // fifth 
        }
        else{
            throw new ConfigurationException("Configuration error");

        }
        
        
        
    }catch(Exception e){
        throw new ConfigurationException(e.getMessage());

        
    }
    
    
}

只有在我的主方法“配置”中的所有这些方法都没有出现错误时,我才想提交。

我在想@transactionnal 注释为此工作,但在内部的每个方法之后提交。

例子:

如果 this.es.save 有效而 this.ds.saveAllDetails 无效,我在数据库中找到 es.save 的数据 :(

有人可以帮助我吗?

提前感谢您的阅读和潜在的帮助。

@Transactional 如果执行的方法抛出未经检查的异常,将自动调用回滚。

您的情况中的 ConfigurationException 是一个已检查的异常,因此它不起作用。

您可以通过将注释修改为

来使其工作
      @Transactional(rollbackOn = ConfigurationException.class)
      public void configure(EnteteAR entete) throws ConfigurationException {
         try{ ....