0

我有以下情况:我有一个 ProductFamily 有一组产品。

我从数据库加载 ProduktFamily,然后我想加载其产品并将它们插入 ProduktFamily.products。

在 Spring MVC 中很容易(因为 JPA),但使用 Webflux 我正在苦苦挣扎。我试过这个,但它不起作用。ProduktFamily.products-set 为空。

服务:

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"));
  }

有没有办法从 Mono 开始,然后遍历 Flux 以将每个产品添加到 Productfamily,然后返回 ProductfamilyRS?

谢谢

4

1 回答 1

0

好的让它工作,但不知道它是否是一个好方法。有人可以评论吗?

  public Flux<ProduktfamilieRS> getAllProduktFamilien() {
    return produktfamilieDatabaseFacade.findAll()
        .map(produktfamilieEntity2 -> dtoMapper.produktfamilieEntityToProduktfamilieRS(produktfamilieEntity2))
        .concatMap(this::loadProdukteFlat);
  }


  private Mono<ProduktfamilieRS> loadProdukteFlat(ProduktfamilieRS produktfamilieRS) {
    return produktDatabaseFacade.findByProduktfamilieId(produktfamilieRS.getId())
        .doOnNext(produktEntity -> produktfamilieRS.getProdukte().add(dtoMapper.produktEntityToProduktRS(produktEntity)))
        .then(Mono.just(produktfamilieRS));
  }

于 2021-08-02T09:59:00.667 回答