Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GraphQLJava:使用@Batched DataFetcher_Graphql_Graphql Java - Fatal编程技术网

GraphQLJava:使用@Batched DataFetcher

GraphQLJava:使用@Batched DataFetcher,graphql,graphql-java,Graphql,Graphql Java,我知道如何: 但是,具有嵌套列表的模式应该使用BatchedExecutionStrategy,并使用注释为@batched()的get()方法创建批处理数据获取程序 但是我应该把getData()调用放在哪里呢 ///// Where to put this code? List list = myService.getData(); ///// public class MyDataFetcher implements DataFetcher { @Batched public

我知道如何:

但是,具有嵌套列表的模式应该使用BatchedExecutionStrategy,并使用注释为@batched()的get()方法创建批处理数据获取程序

但是我应该把getData()调用放在哪里呢

///// Where to put this code?
List list = myService.getData();
/////

public class MyDataFetcher implements DataFetcher {

  @Batched
  public Object get(DataFetchingEnvironment environment) {
    return list.get(environment.getIndex()); // where to get the index?
  }
}

警告:原来的
BatchedExecutionStrategy
已被弃用,将被删除。当前首选的解决方案是。此外,整个执行引擎将在未来被替换,新引擎将再次支持“本地”批处理。您已经可以使用and(都在
nextgen
包中),但它们对指令插入的支持有限。下面的答案同样适用于legacy和nextgen执行引擎

像这样看。正常的
DataFetchers
s接收单个对象作为源(
DataFetchingEnvironment#getSource
),并作为结果返回单个对象。例如,如果您有如下查询:

{
   user (name: "John") {
       company {
           revenue
       }
}
您的
公司
解析程序(取数器)将获取一个
用户
对象作为源,并将以某种方式基于此返回一个
公司
,例如

User owner = (User) environment.getSource();
Company company = companyService.findByOwner(owner);
return company;
现在,在完全相同的场景中,如果您的
DataFetcher
是批处理的,并且您使用了
BatchedExecutionStrategy
,而不是接收
用户
并返回
公司
,那么您将收到一个
列表
,并返回一个
列表

例如

List owner=(List)environment.getSource();
上市公司=companyService.findByOwners(所有者);
返回公司;
请注意,这意味着您的底层逻辑必须有一种同时获取多个内容的方法,否则它将不会被批处理。因此,您的
myService.getData
调用需要更改,除非它已经可以一次性获取多个源对象的数据

还要注意,批处理解析仅在嵌套查询中有意义,因为顶级解析程序已经可以获取对象列表,而不需要批处理

User owner = (User) environment.getSource();
Company company = companyService.findByOwner(owner);
return company;
List<User> owners = (List<User>) environment.getSource();
List<Company> companies = companyService.findByOwners(owners);
return companies;