graphql变异是否可以与查询一起连接到DataFetcher类中?

graphql变异是否可以与查询一起连接到DataFetcher类中?,graphql,graphql-java,Graphql,Graphql Java,错误:字段未定义:类型“查询”中的字段“createUser”未定义@“createUser” 1.我不能同时使用通用datafetcher/reslover进行查询和变异吗 正如我在下面的一节课上所做的。它是无法找到的 createUser? @Component public class UserDataFetcher implements DataFetcher<List<User>> { @Autowired UserRepository userReposito

错误:字段未定义:类型“查询”中的字段“createUser”未定义@“createUser”

1.我不能同时使用通用datafetcher/reslover进行查询和变异吗 正如我在下面的一节课上所做的。它是无法找到的 createUser?

@Component
public class UserDataFetcher implements DataFetcher<List<User>> {
@Autowired
UserRepository userRepository;

public User createUser(DataFetchingEnvironment environment) {
    String username = environment.getArgument("username");
    String location= environment.getArgument("location");
    User[] follower = environment.getArgument("followers");
    User[] following = environment.getArgument("following");
    Post[] pos = environment.getArgument("posts");

    User user = new User();
    user.setUsername(username);
    user.setFollowers(follower);
    user.setFollowing(following);
    user.setLocation(location);
    user.setPosts(pos);
    return userRepository.save(user);
}


@Override
public List<User> get(DataFetchingEnvironment environment) {
    return userRepository.findAll();
}
}
2.模式正确吗,因为它会说用户和帖子没有提到InputType。我尝试了用户和帖子的InputType,但是 无法使其工作。应如何更正存储的架构 追随者和追随者看起来像?

1)不,每个
DataFetcher
实现只能执行一个操作-这是接口指定的
get
方法。框架如何知道调用
createUser
方法

@Component
public class UserDataFetcher implements DataFetcher<List<User>> {
@Autowired
UserRepository userRepository;

public User createUser(DataFetchingEnvironment environment) {
    String username = environment.getArgument("username");
    String location= environment.getArgument("location");
    User[] follower = environment.getArgument("followers");
    User[] following = environment.getArgument("following");
    Post[] pos = environment.getArgument("posts");

    User user = new User();
    user.setUsername(username);
    user.setFollowers(follower);
    user.setFollowing(following);
    user.setLocation(location);
    user.setPosts(pos);
    return userRepository.save(user);
}


@Override
public List<User> get(DataFetchingEnvironment environment) {
    return userRepository.findAll();
}
}
2) 否,架构无效。您不能将
User
用作参数(输入)类型。您需要定义单独的输入类型,例如

input UserInput {
   username:String!
   followers:[ID!]
   following:[ID!]
   location:String!
}
试想一下,如果您可以将
User
作为输入,您将如何提供强制ID?如果
User
实现了一个接口,因为接口不是为输入定义的呢?想象一下如果
User
有一个递归字段类型。在输出中,这很好(因为您直接控制嵌套级别),但不可能满足输入类型的要求

输入和输出的规则完全不同,因此需要分别定义类型

此外,在本例中,对于follower或followerd,只需要
ID
s,而不是full对象,因为这通常更有意义

input UserInput {
   username:String!
   followers:[ID!]
   following:[ID!]
   location:String!
}