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

How to write a Spring JPA repository method name to activate the Distinct clause in Couchbase?

正在开发使用 Spring Data Couchbase 2.2 的 Java 应用程序。0.RELEASE...

从代表 Book objects 的 JSON objects 列表开始:

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

Book objects 的数组被插入到 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"}

我是不是方法名写错了?

SDC 当前不支持不同的查询派生。我已经创建了一张增强票 here。同时,您可以通过直接使用 @Query 而不是 n1ql.selectEntity 来变通,提供 select 部分。

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

interface OnlyTitle {
    String getTitle(); 
}

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