不了解什么是最佳实践,或者是否存在某种在GraphQL解析器中获取嵌套模型的模式。例如,我的域模型由两个实体组成:用户和城市。因此,我有User
和City
休眠实体,UserDto
和CityDto
以及User
和City
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()) }
)
这是问题所在:现在在解析器中,我需要再次从UserDto
(env.getSource()
)中按ID获取用户。我还有两个选择:
在“ UserDto”中将城市ID保存为cityId
字段。现在,我不必再次在解析器中获取用户,但是我需要实现CityService
以通过ID获取城市
在我的应用程序中创建自定义GraphQL上下文,并将User
实体的对象放置到该对象或env
对象中。现在,在解析器中,我可以请求city
字段并将该实体转换为DTO