クエリにネストされたフィールド、またはマッピングタイプのフィルタリング

DrSatan1:

おそらく、基本的な質問すみません。私はそうのような製品のDTOのフェッチを実装するためにGraphQL SPQRを使用しました:

@GraphQLQuery(name = "products")
public Page<ProductEntity> getProducts(@GraphQLArgument(name = "count", defaultValue = "10") int count, @GraphQLArgument(name = "offset") int offset) {
    Pageable queryPage = PageRequest.of(offset, count);
    return productRepository.findAll(queryPage);
}

私はこのクエリと私のデータリポジトリを通じてページングてることに注意してください。

私のDTOのは、次のように私が問い合わせることができるというように設定されています。

products(count: 10, offset: 0) {
    store {
        products /* attempting to query using the count and offset parameters here is invalid*/ {
            productName
        }
    }
}

第二のタイプ(店舗)の下で、私は再び製品のリストを取得しています。どのように私はそれが製品の最初のリストを取得するのと同じ方法で、第二、製品のネストされたリストを取得するためにGraphQLを伝えることができますか?

私は結合する能力を想像してるGraphQLQuery私にはProductEntityDAOそうと同じ方法で、その型に対するフェッチができるすべて解決することを、クラス、またはこのような何かを。

あなたの支援は歓迎です。

EDIT:

おかげKaqqao。解決策は完全に働いた、と私は「製品を持っているエンティティ」の一般的なケースのためにこれを解決するための要件を持っていました。

これを行うには、私はルックスが次のようにというのが私の製品のエンティティのインターフェイスを定義しました。

@GraphQLInterface(name = "hasProducts", implementationAutoDiscovery = true)
public interface ProductEdge {
    Collection<ProductEntity> getProducts();
}

私はその後、必要性がこれを行うには、私のことをエンティティにこのインタフェースを実装することにより、一般方法でそれを製品のリストへの接続を取得している私のエンティティを行います。

public class CommercialPartnerEntity implements ProductEntity.ProductEdge

そして、私のリポジトリ内:

@Query("select child from CommercialPartnerEntity p inner join p.products child where p = :parent")
@GraphQLQuery(name = "relatedProducts")
Page<ProductEntity> findBy(@Param("parent") ProductEntity.ProductEdge parent, Pageable pageable);

:私は、私のサービスでは、このようなことを行うことが可能

@GraphQLQuery(name = "productsList")
public Page<ProductEntity> getProducts(@GraphQLContext ProductEntity.ProductEdge hasProductsEntity, @GraphQLArgument(name = "count", defaultValue = "10") int count, @GraphQLArgument(name = "offset") int offset) {
    Pageable queryPage = PageRequest.of(offset, count);
    return productRepository.findBy(hasProductsEntity, queryPage);
}

そして、それに応じて私は、一般道での任意の特定のタイプのための私のリゾルバを定義しています。ソリューションに他の人の考えを聞くのが大好きです。

「名前によるフィルタ」のようなものを実装するとき、私は、これはあまりにも、非常に便利になるだろうと想像します。

kaqqao:

私は右のあなたを取得した場合は、解決するには、外部メソッドを呼び出す方法を探していますstore.productsそのような場合、これは使用して達成することは容易です@GraphQLContext

あなたは、例えばのような何かができます:

//Any class with queries
public class ProductService {

    @GraphQLQuery(name = "products")
    public Page<ProductEntity> getProducts(@GraphQLContext Store store, @GraphQLArgument(name = "count", defaultValue = "10") int count, @GraphQLArgument(name = "offset") int offset) {
        //your logic here, maybe delegating to the existing getProducts method
    }
}

場合はStore、既に持っているgetProducts、あなたがしたい場合があり@GraphQLIgnore、それが、必須ではありません。

あなたがに渡された引数と同じ取得する方法を求めている場合はproducts内部をstore.products、私の答えを確認してくださいここにあなたは、注入することができResolutionEnvironment使用して@GraphQLEnvironment ResolutionEnvironment、そこからあなたを取得することができDataFetchingEnvironment、あなたがそれを必要とする場合。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=214634&siteId=1