批量插入的最佳 JPA ID 生成策略

VNR*_*VNR 2 java oracle hibernate jpa spring-data-jpa

我在使用 Spring Data JPA 存储库一次插入 100 000 条记录时遇到问题。当我们执行时,repo.save(List<Objs>)如果我们使用序列生成器,它会花费很多时间,因为它会查询数据库中的 nextval。我正在使用 Oracle,哪种 ID 生成最好?

Les*_*iak 5

序列生成器可能是一个不错的选择,但您必须调整其参数。

在您的特定情况下,我将开始尝试分配大小,然后尝试策略。例如,请参见:JPA/Hibernate 批量插入速度慢

查看优化器配置: https://vladmihalcea.com/hibernate-hidden-gem-the-pooled-lo-optimizer/

请注意,您的配置解析为:

  • SequenceHiLoGenerator在休眠 4 上
  • SequenceStyleGenerator在 Hibernate 5 上,(它已hibernate.id.new_generator_mappings设置为 true)

您不能使用身份生成器(请参阅使用身份标识符生成器时 Hibernate 禁用插入批处理

表生成器不是性能最好的生成器(https://vladmihalcea.com/why-you-should-never-use-the-table-identifier-generator-with-jpa-and-hibernate/

此外,请确保数量nextval()是实际问题。也许更改批量大小或语句顺序会有所帮助(请参阅https://vladmihalcea.com/how-to-batch-insert-and-update-statements-with-hibernate/