Как сообщить GraphQL BatchLoader знать извлеченные поля текущей DataFechingEnvironment? - PullRequest
0 голосов
/ 23 марта 2020

Я создал демо о graphql- java на языке kotlin: https://github.com/babyfish-ct/grahpql-java-example. но я столкнулся с проблемой и не знаю, как это сделать лучше

Для столбцов, которые не являются ни первичными ключами, ни внешними ключами каких-либо таблиц, эта демонстрация выбирает только те столбцы, которые требуются GraphQL. это означает, что BatchLoader необходимо знать список имен выбранных столбцов текущей DataFetchingEnvironment.

В отличие от глобального контекста, объекты DataFetchingEnvironment для загрузки различных данных об ассоциации не совпадают, поэтому невозможно использовать BatchLoaderWithContext.

Поэтому я создал класс

data class LoaderKey<K>(
    val value: K,
    val propNames: Collection<String>
)

в https://github.com/babyfish-ct/grahpql-java-example/blob/master/src/main/kotlin/org/frchen/graphql/example/loader/Common.kt. Первое свойство 'value' - это DataKey объекта DataLoader, второе свойство 'propNames' - это коллекция "env.selectionSet.get (). Keys" (env - это объект DataFetchingEnvironment), который используется для указания списка выбора имени столбцов для загрузка данных текущей ассоциации. см. функции «loadOptionalReferenceAsyn c», «loadRequiredReferenceAsyn c» и «loadListAsyn c» в одном файле.

Это решение работает, но это глупо, поскольку разные объекты LoaderKey часто имеют одинаковые propNames, это расточительно.

Как я могу сделать это лучше?

...