我正在使用Java Spring Boot API,需要在数据库中插入批量数据。我知道我怎么能做到这一点。
要使用Sring Boot和Spring Data JPA获得批量插入,您只需要两件事:
spring.jpa.properties.hibernate.jdbc.batch_size = 50
saveAll()
方法与准备插入的实体列表一起使用。我想知道的是如何实现动态batch_size,即在某些类中,我只需要保存/插入5到10条记录,而在某些类中,该数目可能是200到500条或更多记录。
现在,如何实现此动态batch_size选项。
答案 0 :(得分:1)
您不能仅在运行时使用batch_size
AP Ioption来动态更改EntityManager
,但可以进行某种控制:
1)将batch_size设置为最高期望值(即500)。
2)设置这些道具,以使休眠状态不尝试使用以前完成的save/update
语句。
hibernate.order_inserts=true
hibernate.order_updatest=true
3)使用save
代替saveAll
。遍历您的列表,并刷新与要保存的类相关的所有次数:
int = flushAfterThisNumber = 10;
for ( int i=0; i<entities.length; i++ ) {
session.save(entities[i]);
if ( i % flushAfterThisNumber == 0 ) {
//flush a batch of inserts and release memory:
session.flush();
session.clear();
}
}
更新
有一种解决方法,但是您需要创建一个自定义存储库,以便能够注入EntityManager
,然后解开Hibernate Session
,然后可以访问{ {1}}。
batch_size