优化saveAll 批量插入缓慢问题
Posted 棘丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优化saveAll 批量插入缓慢问题相关的知识,希望对你有一定的参考价值。
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更新操作
以上是关于优化saveAll 批量插入缓慢问题的主要内容,如果未能解决你的问题,请参考以下文章
Spring Data JPA saveAll 不进行批量插入