Правильный способ последовательного выполнения двух запросов в r2dbc

Я работаю с R2DBC, и мне нужно выполнить запрос, который по запросу возвращает поток моих сущностей, и после этого мне нужно преобразовать эти сущности в DTO, но для создания DTO мне нужно сделать еще один запрос к базе данных для каждого объекта, который возвращает некоторую специальную информацию из других таблиц, например:

Этот код не работает, если общее количество идентификаторов превышает 512

 orderRepository.findByIds(listIds).flatMap{ order->
        eventRepostiry.findByOrderId(order.id).map{events->
           entityToDtoMapper.map(order,events,OrderWithEventsDto::class.java)
        }
    } 

concatMap не помогает.

Но этот код работает

orderRepository.findByIds(listIds).collectList().flatMapMany{orders->
        Flux.fromIterable(orders)
    }.flatMap{ order->{
          eventRepository.findByOrderId(order.id).collectList().flatMapMany{ events->
              Flux.fromIterable(events)
          }.map { event->
              entityToDtoMapper.map(order,events,OrderWithEventsDto::class.java)
          }
       }
    }

Думаю, есть лучшее решение этой проблемы. Как я должен правильно выполнять эти запросы?


person kkaminsky    schedule 23.03.2020    source источник
comment
Не могли бы вы пояснить, что вы имеете в виду, говоря, что код не работает?   -  person Martin Tarjányi    schedule 23.03.2020
comment
@ MartinTarjányi Выполнение запроса, когда получены не все результаты, может исчерпать буфер предварительной выборки из 512 элементов и привести к зависанию моего потока результатов. Для получения дополнительной информации см. ссылка   -  person kkaminsky    schedule 24.03.2020