Spring Data Jpa Spring Boot 批量插入,按组回滚

iibxawm4  于 2022-11-23  发布在  Spring
关注(0)|答案(1)|浏览(136)

所以我正在做一个Spring Boot 项目,我需要插入一些批量数据。但是我想以组的形式插入,比如说每组20个实体,如果出了问题,我希望它回滚组而不是整个项目。我如何实现这一点?
这是我的想法:

@Transactional
public void saveBatchAsGroups(List<EntityClass> data) {
    List<EntityClass> group = new ArrayList();
    for (EntityClass entity : data) {
        //some operations

        group.add(entity);
        if (group.size() > 19) {
            saveGroup(group);
            group.clear();
        }
    }
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void saveGroup(List<EntityClass> group) {
    someRepository.saveAll(group);
}

这样,saveGroup为每个保存操作打开一个新事务。
这是一个很好的做法,在性能等方面,它可以做到没有一堆新的事务,如保存点或类似的东西?什么是最好的方式来实现这种工作?

ukdjmx9f

ukdjmx9f1#

JPA现在不堆叠事务,所以外部的@Transactional至少是令人困惑的。
除此之外,这看起来还可以。不过你可能要考虑Spring Batch,它是为这种过程构建的。

相关问题