如何在GraphQL解析器中解析嵌套实体?

时间:2019-07-21 13:52:40

标签: spring-boot graphql-java

不了解什么是最佳实践,或者是否存在某种在GraphQL解析器中获取嵌套模型的模式。例如,我的域模型由两个实体组成:用户和城市。因此,我有UserCity休眠实体,UserDtoCityDto以及UserCity GraphQL类型:

type Query {
    getUser(id: ID!): User!
}

type User {
    id: ID!
    name: String!
    city: City!
}

type City {
    id: ID!
    name: String!
}

单个查询的实现方式如下:

                .dataFetcher("getUser") { env ->
                    val id: Long = env.getArgument<String>("id").toLong()
                    userConverter.toDto(userService.getById(id))
                }

用户的城市现在解析如下:

       .type(
            newTypeWiring("User")
                .dataFetcher("city") { env -> userResolver.getCity(env.getSource()) }
        )

这是问题所在:现在在解析器中,我需要再次从UserDtoenv.getSource())中按ID获取用户。我还有两个选择:

  • 在“ UserDto”中将城市ID保存为cityId字段。现在,我不必再次在解析器中获取用户,但是我需要实现CityService以通过ID获取城市

  • 在我的应用程序中创建自定义GraphQL上下文,并将User实体的对象放置到该对象或env对象中。现在,在解析器中,我可以请求city字段并将该实体转换为DTO

0 个答案:

没有答案