使用 JPA 标准生成器批量插入

Posted

技术标签:

【中文标题】使用 JPA 标准生成器批量插入【英文标题】:Bulk insert with JPA criteria builder 【发布时间】:2019-06-01 15:06:04 【问题描述】:

我目前是一个带有postgres和hibernate的spring boot项目,具有以下功能:

  private fun savePost(post: Post): Post = entityManager.merge(post)

  private fun savePosts(posts: List<Post>) = 
       posts.forEach  save(post) 

我想避免顺序插入,所以现在我有一个原始查询:

 private fun savePosts(posts: List<Post>) 
      val queryText: String = createTextQueryFromList(posts)
      val query = entityManager.createNativeQuery(queryText)
      query.executeUpdate()
 

这确实有效,但不是很干净。

使用标准构建器进行批量插入的正确方法是什么?

【问题讨论】:

【参考方案1】:

第一个选项是遍历帖子并刷新一批更新并释放内存。 这里的最后一个答案: Batch inserts using JPA EntityManager 表示 JPA 本身没有任何批处理设置。但是,有一些依赖于实现的设置。 Here is an example for hibernate。 请参阅13.2。批量更新

另一种选择是尝试session.doWork() 见例子https://keyurj.blogspot.com/2012/12/dowork-in-hibernate.html

【讨论】:

您好,您提供给我的答案适用于 JPA 存储库。我没有任何存储库(实现 JPA 存储库接口的类),而是使用实体管理器。您能否详细说明我如何将建议的场景应用到我的案例中?

以上是关于使用 JPA 标准生成器批量插入的主要内容,如果未能解决你的问题,请参考以下文章

使用 JPA/EJB3 进行批量插入

Spring-data-jpa:批量插入不起作用

JPA/Hibernate 批量(批量)插入

JPA 批量插入不会提高性能

使用 JPA EntityManager 进行批量插入

JPA SQL Server 批量插入