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 @   枫树湾河桥  阅读(13089)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
Live2D
欢迎阅读『jpa batch批量操作save和persist比较』
点击右上角即可分享
微信分享提示
西雅图
17:15发布
西雅图
17:15发布
6°
东北风
2级
空气质量
相对湿度
86%
今天
多云
3°/15°
周四
4°/16°
周五
4°/14°