【发布时间】:2018-07-08 03:38:55
【问题描述】:
我正在使用 spring boot 和 spring data jpa with hibernate,japrepository.save(List) 花了 20 分钟将 8000 条记录保存到 oracle 数据库。有人可以帮我解决它。在 application.properties 中添加 spring.jpa.properties.hibernate.jdbc.batch_size=1000 也没有帮助。
应用程序属性
server.servlet-path = /*
spring.datasource.jndi-name=jdbc/mydatasource
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
spring.jpa.properties.hibernate.jdbc.batch_size=1000
【问题讨论】:
-
您是否使用 GeneratedValue 生成主键?如果是的话,什么策略
-
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ubseq") @SequenceGenerator(sequenceName = "OWNER.ub_seq", schema = "OWNER", allocationSize = 1, name = "ubseq" ") 私人长ID;
-
问题可能出在 Sequence 的 allocationSize 上,因为每次插入都会获得一个新的序列号,这是一项昂贵的操作。将其设置为 1 是否有原因?
-
没有具体原因,其实我对Spring/Hibernate框架不是很熟悉。我需要序列中的主键值,或者如果您可以建议其他方法,请尝试。
-
太好了,我刚刚从 SequenceGenerator 中删除了 'allocationSize = 1' 属性,所有 8000 条记录都在 1 分钟内保存了下来。最初我认为它就像加一一样。现在我的代码在 Tomcat 中运行,我需要将它实际部署在 JBoss 上,让我们看看它是如何工作的。非常感谢 Simon Martinelli :)
标签: oracle spring-boot spring-data-jpa