关于java:优化saveAll-批量插入缓慢问题

35次阅读

共计 864 个字符,预计需要花费 3 分钟才能阅读完成。

jpaSaveAll 源码

    @Transactional
    @Override
    public <S extends T> List<S> saveAll(Iterable<S> entities) {Assert.notNull(entities, "Entities must not be null!");

        List<S> result = new ArrayList<S>();

        for (S entity : entities) {
        // 其次要外围则是 save 办法
            result.add(save(entity));
        }

        return result;
    }
// save 办法    
    @Transactional
    @Override
    public <S extends T> S save(S entity) {
// 每次进来则是须要查问是否存在这个对象
        if (entityInformation.isNew(entity)) {em.persist(entity);
            return entity;
        } else {return em.merge(entity);
        }
    }

6.4.1 批量插入

解决方案是本人用 em 进行长久化插入,省了一步查问操作。

@PersistenceContext

private EntityManager entityManager;

@Override

@Transactional(rollbackFor = Exception.class)

public void addBatch(List list) {

for (ProjectApplyDO projectApplyDO : list) {

entityManager.persist(projectApplyDO);//insert 插入操作

}

entityManager.flush();

entityManager.clear();

}

6.4.2 批量更新

在确保数据曾经存在的状况下,如果是批量更新能够如下代码代替下面的 entityManager.persist(projectApplyDO); 语句:

entityManager.merge(projectApplyDO);//update 更新操作

正文完
 0