Java如何接收Cosmos DB中SELECT VALUE COUNT查询的返回结果
问题根源
你声明的countInRange方法返回泛型为MyEntity,但SELECT VALUE COUNT(1)返回的是数值类型,和实体类不匹配,因此会触发类型转换错误。
解决方案
第一步:修正Repository方法返回类型
COUNT查询只会返回单个数值,响应式场景下使用Mono<Long>作为返回类型即可,修改后代码如下:
@Query(value = "SELECT VALUE COUNT(1) FROM c WHERE @startTime <= c.timestamp AND c.timestamp <= @endTime") Mono<Long> countInRange( @Param("startTime") Long startTime, @Param("endTime") Long endTime );
第二步:修正Service层取值逻辑
Mono类型直接调用block()即可获取最终的计数结果,不需要额外转集合取首个元素:
@Autowired private MyRepository repo; // 若业务场景不允许阻塞,可直接使用Mono进行后续响应式链式操作 long totalCount = repo.countInRange(1623736778L, 1623736779L).block();
补充说明
你之前日志打印的FluxMap是Reactor框架的内部操作实现类,无需关注其具体实现,只要正确声明查询方法的返回泛型,Spring Data Cosmos会自动完成结果类型转换。
如果使用的是非响应式的CosmosRepository,直接将方法返回类型声明为Long即可直接获取计数结果。
内容的提问来源于stack exchange,提问作者jskattt797
相关产品推荐
相关产品推荐

