Spring-data-couchbase - выполнение не специального параметризованного запроса

Есть ли возможность выполнить параметризованный запрос N1QL с отключенным флагом adhoc с использованием аннотации @Query?

Т.е. для данного запроса:

@Query("#{#n1ql.selectEntity} WHERE #{#n1ql.filter} and author = $author")
List<Comment> getCommentsByAuthor(@Param("author") String author);

Если нет, есть ли другой способ заставить couchbase использовать вторичный индекс (в этом примере индекс по полю автора) в запросах аннотации?


person IgorekPotworek    schedule 06.02.2017    source источник


Ответы (1)


Кажется, вы смешиваете несколько вещей:

  • Параметризованный запрос будет работать с аннотацией @Query, как в вашем фрагменте. В документации упоминается это (под первым блоком предупреждения в этот раздел)

  • Вторичные индексы N1QL должны автоматически выбираться N1QL в зависимости от оператора. Тонкость здесь в том, что n1ql.filter. SDC необходимо, чтобы такие запросы были ограничены правильным набором документов в разнородной корзине.

  • adhoc - это другое: речь идет о подготовленных заявлениях. SDC не использует эту функцию и будет производить только запрос N1QL со значением по умолчанию для adhoc (которое, насколько мне известно, все еще равно true).

Если вы зарегистрировали запрос, созданный этой аннотацией, и выполнили для него EXPLAIN, чтобы убедиться, что индекс не выбран, может быть, попробуйте инвертировать два выражения в предложении WHERE?

person Simon Baslé    schedule 07.02.2017
comment
Спасибо. Я неправильно понял значение флага adhoc в couchbase, но обычно отвечаю, что spring-data-couchbase не поддерживает не adhoc запросы. - person IgorekPotworek; 07.02.2017