如何编写Spring JPA存储库方法名来激活Couchbase中的Distinct子句?

时间:2017-05-02 20:20:22

标签: spring-data-couchbase

使用Spring Data Couchbase 2.2.0.RELEASE ...

的Java应用程序

从表示Book个对象的JSON对象列表开始:

[
    {id: 123, title: "Abc", category: "A"},
    {id: 456, title: "Efg", category: "B"},
    {id: 789, title: "Abc", category: "A"}
]

Book个对象数组插入到Couchbase中。之后,应用程序希望根据类别过滤器获取不同书籍标题的列表。在一些Spring文档之后,我在BookRepository界面中找到了这个方法名称:

List<Book> findDistinctTitleByCategory(String category);

但是,Spring创建的查询不包含标题的Distinct子句。这里是Spring发送到CB集群的最终查询,其中桶名称为default

Executing N1QL query: {"statement":"SELECT META(`default`).id AS _ID, META(`default`).cas AS _CAS, `default`.* FROM `default` WHERE (`category` = \"A\")","scan_consistency":"not_bounded"}

我写的方法名称错了吗?

1 个答案:

答案 0 :(得分:2)

SDC目前不支持distinct的查询派生。我创建了一张增强版的凭单here。在此期间,您可以直接使用@Query而不是n1ql.selectEntity来解决,提供选择部分。

如果您只提取标题,SDC支持projections

interface OnlyTitle {
    String getTitle(); 
}

@Query(...)
OnlyTitle findDistinctTitleByCategory(String category);