如何解决CosmosDB SQL API Java SDK v.4 ReadAllItems 方法不返回结果
我在使用方法从 cosmos db sql api
获取结果时遇到了一些障碍:
.readAllItems(partitionKey,classtype)
.readAllItems(partitionKey,options,classtype)
当我有类的扁平结构时,上述方法工作正常。我的意思是没有子类嵌套在我的模型类中。下面是类示例,它不起作用:
public class Root {
public Root(){};
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Subclass getSubclass () {
return subclass;
}
public void setSubclass (Subclass subclass) {
this.subclass= subclass;
}
private String id = "";
private Subclass subclass= new Subclass ();
}
为了简单起见,我的子类只包含 partitionKey。
public class Subclass {
public String getPk() { return pk; }
public void setPk(String pk) {
this.pk = pk;
}
private String pk="";
}
有了这样的“结构”,我可以轻松地在容器内创建项目,并使用适当的分区键值,但我无法仅使用 partitionKey
值再次加载它们。这是从 cosmosdb
读取它们的代码片段。
PartitionKey partitionKey = new PartitionKey("properValueWhichWorksWithNonestedClassesInsideRoot");
CosmosPagedFlux<Root> pagedFluxResponse = container.readAllItems(partitionKey,Root.class);
try {
double totalRequestCharge = pagedFluxResponse.byPage(preferredPageSize).flatMap(fluxResponse -> {
entities.addAll(fluxResponse.getResults());
return Mono.just(fluxResponse.getRequestCharge());
})
.reduce(0.0,(x1,x2) -> x1 + x2)
.block();
logger.info("Query charge: {}",totalRequestCharge);
} catch(Exception err) {
err.printstacktrace();
}
return entities;
我不太确定我是做错了什么还是错误,因为我使用了与 .queryItems(query,queryOptions,classtype)
相同的代码,它也返回 CosmosPageFlux
而不是 .readAllItems
并且它有效完全没问题。
我使用这样的依赖:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-cosmos</artifactId>
<version>LATEST</version>
</dependency>
我还使用了一些特定版本的 LATEST
而它不起作用。
解决方法
我已经在我身边进行了测试,发现了一些有趣的事情。
readAllItems
是SqlQuery 实现的一个函数,所以当我调试你的情况将分区键放在一个子属性中时,它会生成一个这样的sql:
所以,显然它可以得到任何响应,因此 readAllItems 的结果不返回任何响应。最好直接使用queryItems。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。