【问题标题】:Can I derive ARRAY_CONTAINS from query method name in Spring Data Couchbase Repository?我可以从 Spring Data Couchbase 存储库中的查询方法名称派生 ARRAY_CONTAINS 吗?
【发布时间】:2019-04-25 07:47:41
【问题描述】:

我有一个包含组成员名称列表的 Couchbase 文档“组”。我想查询一个人的所有组。我设法用N1QL ARRAY_CONTAINS 做到了——见代码示例——但我希望我可以像在 Spring Data 中一样从方法名称生成查询。

任何帮助表示赞赏:)

我试过了

public List<MyGroup> findAllByMembers(String member); 和 public List<MyGroup> findByMembers(String member); 但他们只返回一个空列表 - 我猜他们试图匹配整个“成员”值并且不将其识别为列表 - 没有错误。

代码

带有列表字段的我的文档

@Data
@Document
public class MyGroup {
    private String name;
    private List<String> members = new ArrayList<>();
}

我的仓库

@RepositoryDefinition(domainClass = MyGroup.class, idClass = String.class)
public interface MyGroupRepository extends CouchbaseRepository<MyGroup, String> {

    //@Query("#{#n1ql.selectEntity} WHERE ARRAY_CONTAINS(members,$1) AND #{#n1ql.filter}")
    public List<MyGroup> findAllByMembers(String member);
}

预期

给定一个“group1”,成员中有“member1”。 repository.findAllByMembers("member1");应该返回 ["group1"]。

【问题讨论】:

    标签: java n1ql spring-data-couchbase


    【解决方案1】:

    Couchbase 受 Spring Data 规范的限制。不幸的是,我们不能简单地向它添加新行为(如果您切换到关系数据库,它必须在没有断点的情况下工作)。因此,每当您需要查询具有 N1QL 特定功能/关键字的内容时,您必须通过 @Query 编写查询

    【讨论】:

    • 我不确定您所说的“Couchbase 受 Spring Data 规范的限制”是什么意思。据我了解,Spring-Data-Couchbase 只是 N1QL 的一个门面,并受到 Couchbase 的 N1QL 的限制。 Couchbase N1QL 具有该功能,因此 Spring Data 可以使用它,而不仅仅是通过 @Query。
    • Spring Data 由 Pivotal spring.io/projects/spring-data 创建,大多数关系数据库都支持它。 Couchbases 也增加了对它的支持,但是任何不能在关系数据库中完成的事情(比如你的情况下的数组搜索)都不能通过方法名称约定来表达。
    猜你喜欢
    • 2015-07-13
    • 2017-11-08
    • 2017-06-18
    • 2019-06-10
    • 1970-01-01
    • 2014-12-27
    • 2020-02-23
    • 2017-03-22
    • 1970-01-01
    相关资源
    最近更新 更多