jpa batch批量操作save和persist比较

1.网上最常见的JPA----entityManager批量操作方法

    private EntityManager em;
    @PersistenceContext(name = "EntityManagerFactory")
    public void SetEntityManager(EntityManager em) {
        this.em = em;
    }
    @Transactional
    public void saveBatch(List<CustomerEntity> list) {
        for (int i = 0; i < 10000; i++) {
            em.persist(list.get(i));
            if (i % 1000 == 0) {
                em.flush();
                em.clear();
            }
        }
    }

2.Jpa--Repository批量写入

    @Transactional
    public void saveBatchJpa(List<CustomerEntity> list) {
        repository.save(list);
    }

 

3.结论

EM和JPA直接操作集合没有太大的性能区别,直接使用JPA操作集合即可。如下是JPA操作集合的代码,可以看出起始内部也是用的em

  @Transactional
    public <S extends T> List<S> save(Iterable<S> entities) {
        List<S> result = new ArrayList<S>();
        if (entities == null) {
            return result;
        }
        for (S entity : entities) {
            result.add(save(entity));
        }
        return result;
    }
/*
     * (non-Javadoc)
     * @see org.springframework.data.repository.CrudRepository#save(java.lang.Object)
     */
    @Transactional
    public <S extends T> S save(S entity) {
        if (entityInformation.isNew(entity)) {
            em.persist(entity);
            return entity;
        } else {
            return em.merge(entity);
        }
    }

 

posted @ 2018-06-13 10:10  枫树湾河桥  阅读(13069)  评论(0编辑  收藏  举报
Live2D