我正在使用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编写计数查询?
我在spring文档中找不到任何相关内容。 link
发生此异常是因为@Query
注释的设计考虑了检索实体的用例。从RC1开始,对类似标量的预测是未发现的角落案例。也许我可以想一些通过注释中的显式布尔标志添加对它的支持的方法?
不幸的是我无法找到解决方法。我试图想出一个自定义存储库方法实现,但它似乎支持它在2.0.0-RC1中打破:(
编辑:简单返回类型的用例,例如long,使用只使用单个聚合的SELECT,应该可以工作,这是一个bug /改进。我在Spring Data JIRA中打开了机票DATACOUCH-187。
@Query("SELECT count(*) , META(default).id as _ID, META(default).cas as _CAS FROM default")
将您的查询更改为此查询。
使用此查询:
@Query("SELECT count(*) as count FROM #{#n1ql.bucket} WHERE #{#n1ql.filter} ")
long myCount();