首页 > 解决方案 > Spring Data JPA Rollback If Save Method Throw Exception

问题描述

问题解决:转到最后一个条目

如果 crudrepository 的保存方法抛出任何异常,我正在尝试测试我的方法的回滚功能。我有一个主循环,它扫描我的文件并为每一行插入一条记录到表中。我意识到当发生任何异常时,循环中断但回滚操作不起作用。我错过了什么?提前致谢

主要代码

@Component
public class ExcelReader {

    @PostConstruct
    @Transactional
    public void openExcel() throws IOException {
        int insertedRowCount = 0;
        int updatedRowCount = 0;
        int exceptionRowCount = 0;

        //some codes

        while (true) {
                //some logic
                City2CityEntity city2CityEntity = new City2CityEntity();


                city2CityRepository.save(city2CityEntity);
                if(insertedRowCount == 500){
                   throw new RuntimeException();
                }
                insertedRowCount++;
            }
        }
        System.out.println(insertedRowCount + " number of rows inserted");
        System.out.println(updatedRowCount + " number of rows skipped");
        System.out.println(exceptionRowCount + " couldn't inserted");
    }
}

存储库

@Repository
public interface City2CityRepository extends CrudRepository<City2CityEntity, Long> {
    Iterable<City2CityEntity> findAll();

    City2CityEntity findByCompanyAndOrgAndDst(String company, String org, String dst);
}

实体

@Entity
@Table(name = "xxx_berkin_city2city", schema = "CRANE_AT", catalog = "")
public class City2CityEntity {
   //getter setters and fields
}

插入 501. 记录后,我抛出了异常。

标签: javajpa

解决方案


@Transactional(rollbackFor = Exception.class)

这是上面的答案。我在这里找到: @Transactional(rollbackFor = Exception.class) 和 @Transactional(propagation=Propagation.REQUIRED) 之间有什么区别


推荐阅读