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更新操作


棘丶
12 声望1 粉丝