Jpa batch выгрузка и сохранение большого количества записей в одном потоке

Рейтинг: 0Ответов: 0Опубликовано: 22.05.2023

Есть задача предохранять данные из одной таблицы psg в другую. есть реализация на JDBC template c batch. мне интересно есть ли реализации на Jpa Batch чтобы частями вычитывать данные и сразу сохранять в одном потоке.

т.е. сейчас у меня сделано вычитывание и сохранение в цикле

for (int i = 0; i < sizeCycle; i++) {
            int page = i * 100;
            int size = i * 100 + 100 - 1;

            Pageable pageable = PageRequest.of(page, size);
            List<AccType> accTypeList = accTypeRepository.findAll(pageable).getContent();
            accTypeRBCRepository.saveAll(accTypeList);
}

код отрабатывает, но меня смущает, что выглядит как-то коряво с

int page = i * 100;
int size = i * 100 + 100 - 1;

нет какого-то оптимизированного способа, чтобы запустить поток и в нем партиционно согласно batch_size данные вычитывались и сохранялись. т.е. например в таблице из которой читаю 1 млн записей. batch_size == 100 и так кусочками данные бы вычитывалиь и сохранялись в одном потоке.

настройки:

jpa:
    show-sql: true
    properties:
      hibernate:
        order_inserts: true
        order_updates: true
        batch_versioned_data: true
        generate_statistics: true
        jdbc:
          batch_size: 100
        naming-strategy: org.hibernate.cfg.EJB3NamingStrategy

Ответы

Ответов пока нет.