我是使用Spring Data for Couchbase的新手,我定义了此对象
public class Building {
@NotNull
@Id
private String id;
@NotNull
@Field
private String name;
@NotNull
@Field
private String companyId;
}
我想按ID对数据库中的所有元素进行计数,所以我创建了此函数:
@Repository
@N1qlPrimaryIndexed
@ViewIndexed(designDoc = "building")
public interface BuildingRepository extends CouchbaseRepository<Building, String> {
@Query("SELECT COUNT(*) AS count FROM #{#n1ql.bucket} WHERE #{#n1ql.filter} and id = $1")
Long countBuildings(String id);
}
但是在保存一个对象之后我却得到0
我也尝试过
@Query("#{#n1ql.selectEntity} WHERE #{#n1ql.filter} and id = $1")
Long countBuildings(String id);
但是我有这个例外
org.springframework.data.couchbase.core.CouchbaseQueryExecutionException: Query returning a primitive type are expected to return exactly 1 result, got 0
看起来您需要返回对象,即构建查询正在返回的对象
您也可以参考spring-data-couchbase repoLine 204-209:https://github.com/spring-projects/spring-data-couchbase/blob/master/src/main/java/org/springframework/data/couchbase/repository/query/AbstractN1qlBasedQuery.java#L204
204-209行
默认情况下,Couchbase N1QL索引是异步更新的,因此,如果您在插入项目后立即进行查询,则该索引可能尚未反映出所添加的项目。
Couchbase提供了两个可选的“扫描一致性”级别,它们在返回查询结果之前等待索引达到特定的一致性点。这些是:
(这里有更多详细信息:https://docs.couchbase.com/server/5.5/indexes/performance-consistency.html)
关于如何在Spring的世界中应用此方法,您可以像这样指定扫描一致性:
@WithConsistency(ScanConsistency.REQUEST_PLUS)
@Query("SELECT COUNT(*) AS count FROM #{#n1ql.bucket} WHERE #{#n1ql.filter} and id = $1")
Long countBuildings(String id);
请参阅https://docs.spring.io/spring-data/couchbase/docs/current/reference/html/#couchbase.repository.consistency了解更多详细信息。