postgresql - 使用 JPA 标准生成器批量插入
问题描述
我目前是一个带有 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()
}
这确实有效,但不是很干净。
使用标准构建器进行批量插入的正确方法是什么?
解决方案
第一种选择是遍历帖子并刷新一批更新并释放内存。这里的最后一个答案: 使用 JPA EntityManager 进行批量插入说 JPA 本身没有任何批处理设置。但是,有一些依赖于实现的设置。这是 hibernate 的示例。见13.2。批量更新
另一种选择是尝试session.doWork()
查看示例https://keyurj.blogspot.com/2012/12/dowork-in-hibernate.html