Java 使用hibernate提高将数据保存到sql数据库的速度

Java 使用hibernate提高将数据保存到sql数据库的速度,java,sql,spring,hibernate,jpa,Java,Sql,Spring,Hibernate,Jpa,我必须使用Hibernate将20000-30000条记录保存到MySQL中。因此,Hibernate也将生成20000-30000个插入查询。我需要1-2分钟来完成所有事情,这将导致我的网站出现504请求超时 首先,我是这样做的: for (some loop elements) { Object foo = new Object(); // do some foo get/set to fulfill the fields. objectService.save(fo

我必须使用Hibernate将20000-30000条记录保存到MySQL中。因此,Hibernate也将生成20000-30000个插入查询。我需要1-2分钟来完成所有事情,这将导致我的网站出现504请求超时

首先,我是这样做的:

for (some loop elements) {
    Object foo = new Object();
    // do some foo get/set to fulfill the fields.
    objectService.save(foo);
}
那是很多时间。然后我尝试将列表保存到db中,如:

List<Object> objs = new ArrayList<>();
for (some loop elements) {
    Object foo = new Object();
    // do some foo get/set to fulfill the fields.
    objs.add(foo);
}
objectService.saveAll(objs);
List objs=new ArrayList();
对于(某些循环元素){
Object foo=新对象();
//做一些foo-get/set来完成这些字段。
objs.add(foo);
}
objectService.saveAll(objs);
差不多吧

在将单个对象/记录保存到数据库中时,需要比保存列表更长的时间。但保存列表仍然会导致超时。所以问题是:有没有比我的解决方案更快的解决方案


提前谢谢

是您可以使用batchYes,您可以自己生成反记录ID,然后将ID提供程序设置为新的当前值,或者您可以创建存储过程来保存记录,或者您可以覆盖
.saveAll(…)
(因为它只是一个
foreach::save(…)
)或者您可以绕过Hibernate,通过参数化SQL请求进行保存。@YCF\L我在谷歌上搜索,谢谢!您可以使用saveAll方法,并将属性spring.jpa.properties.hibernate.jdbc.batch_size设置为批量插入。启用批处理并刷新/清除每个x记录(对于x,查找最佳点,但例如100)。看见