如何使用动态批处理大小(即batch_size)的JpaRepository进行批量插入尚不清楚

时间:2019-04-11 12:42:04

标签: java hibernate spring-boot spring-data-jpa

我正在使用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选项

1 个答案:

答案 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