使用JPA条件构建器批量插入

时间:2019-01-06 21:29:12

标签: postgresql hibernate spring-boot jpa jpa-criteria

我目前正在使用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 个答案:

答案 0 :(得分:0)

第一个选项是遍历帖子并刷新一批更新并释放内存。 这里的最后一个答案: 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