我可以从Spring Data Couchbase存储库中的查询方法名称派生ARRAY_CONTAINS吗?

时间:2019-04-25 07:47:41

标签: java n1ql spring-data-couchbase

我有一个Couchbase文档“ Group”,其中包含group-members-names的列表。我想查询一个人的所有群组。我设法用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);
}

预期

给出成员中带有“ member1”的“ group1”。 repository.findAllByMembers(“ member1”);应该返回[“ group1”]。

1 个答案:

答案 0 :(得分:1)

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

编写查询