0

我正在使用 Spring 模块编写 couchbase 存储库,并且正在尝试使用 N1QL 查询添加我自己的 count 方法实现:

public interface MyRepository extends CouchbaseRepository<Entity, Long> {
    @Query("SELECT count(*) FROM default")
    long myCount();
}

但它不起作用:

org.springframework.data.couchbase.core.CouchbaseQueryExecutionException: Unable to retrieve enough metadata for N1QL to entity mapping, have you selected _ID and _CAS?

所以我的问题是:如何使用 spring-data-couchbase 编写计数查询?

我在春季文档中找不到任何关于此的内容。关联

4

3 回答 3

3

发生此异常是因为@Query注释的设计考虑了检索实体的用例。从 RC1 开始,对类似标量的计数的投影是未发现的极端情况。也许我可以想办法通过注释中的显式布尔标志来添加对它的支持?

不幸的是,我找不到解决方法。我试图想出一个自定义存储库方法实现,但似乎对它的支持在 2.0.0-RC1 中被破坏了:(

编辑:像long这样的简单返回类型的用例,带有只使用单个聚合的SELECT,应该可以工作,所以这是一个错误/改进。我在 Spring Data JIRA 中打开了票DATACOUCH-187 。

于 2016-01-11T17:36:42.060 回答
1
@Query("SELECT count(*) , META(default).id as _ID, META(default).cas as _CAS FROM default")

将您的查询更改为此一个。

于 2016-12-05T15:45:29.437 回答
0

使用此查询:

 @Query("SELECT count(*) as count FROM #{#n1ql.bucket} WHERE #{#n1ql.filter} ")
 long myCount();
于 2019-03-27T12:02:30.930 回答