Могу ли я получить ARRAY_CONTAINS из имени метода запроса в репозитории Spring Data Couchbase? - PullRequest
1 голос
/ 25 апреля 2019

У меня есть Couchbase-Document "Group" со списком имен членов группы.Я хочу сделать запрос для всех групп одного человека.Мне удалось сделать это с N1QL ARRAY_CONTAINS - см. Пример кода - но я надеялся, что смогу сгенерировать запрос по имени метода, как это обычно в Spring Data.

Любая помощьпризнателен:)

Я пытался

public List<MyGroup> findAllByMembers(String member); и public List<MyGroup> findByMembers(String member);, но они просто возвращают пустой список - я думаю, они пытаются соответствовать целому значению "members" и не распознают егов виде списка - без ошибок.

Код

Мой документ с полем списка

@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"].

1 Ответ

1 голос
/ 25 апреля 2019

Couchbase ограничен спецификацией Spring Data.К сожалению, мы не можем просто добавить новое поведение к нему (если вы переключаетесь на реляционную базу данных, она должна работать без точек разрыва).Таким образом, всякий раз, когда вам нужно запросить что-то, имеющее специфическую для N1QL функцию / ключевое слово, вы должны написать запрос через @ Query

...