I have the following scenario: I have a ProductFamily that has a set of Products.
I load the ProduktFamily from the database and then I want to load its Products and insert them into ProduktFamily.products.
Easy in Spring MVC (because of JPA) but with Webflux I am struggeling. I tried this, but it does not work. ProduktFamily.products-set is empty.
Service:
public Flux<ProduktfamilyRS> getAllProduktFamilies() {
return produktfamilyDatabaseFacade.findAll()
.map(produktfamilyEntity2 -> dtoMapper.produktfamilyEntityToProduktfamilyRS(produktfamilyEntity2)) // <-- Mapsctruct Mapper
.concatMap(produktfamilyRS -> loadProducts(produktfamilyRS));
}
private Mono<ProduktfamilieRS> loadProducts(ProduktfamilieRS produktfamilieRS) {
Flux<ProduktEntity> byProduktfamilieId = produktDatabaseFacade.findByProduktfamilieId(produktfamilieRS.getId());
Flux<ProduktRS> produktRSFlux = byProduktfamilieId.map(produktEntity -> dtoMapper.produktEntityToProduktRS(produktEntity));
return Mono.just(produktfamilieRS).map(produktfamilieRS1 -> {
produktRSFlux.all(produktRS -> produktfamilieRS1.getProdukte().add(produktRS));
produktRSFlux.subscribe();
return produktfamilieRS1;
});
}
ProduktfamilyDatabaseFacade:
public Flux<ProduktfamilyEntity> findAll() {
return produktfamilyRepository.findAll();
}
ProduktfamilyDatabaseFacade:
public Flux<ProduktEntity> findByProduktfamilyId(Long produktfamilyId) {
return produktRepository.findAllByProduktfamilyId(produktfamilyeId)
.doOnNext(produktEntity -> log.info("Found Produkt '" + produktEntity.getName() + "' für Produktfamilie"));
}
Is there an way to start from the Mono and then iterate through the Flux to add every Product to the Productfamily and then return the ProductfamilyRS?
Thank you