Couchbase + Spring Data: получить только поле вместо всего объекта с помощью @Query

Я все еще относительно новичок в Couchbase с N1QL и Spring Data. Я пытаюсь получить список всех отдельных полей. Я не хочу извлекать всю сущность, так как ожидаю, что результат будет довольно большим.

Мои документы выглядят так

{
  "fieldname": "something",
  ...
} 

Мой класс репозитория

@Repository
@N1qlPrimaryIndexed
public interface MyRepository extends CouchbasePagingAndSortingRepository<MyEntity, String> {

    @Query("select distinct fieldname from mybucket")
    Object findAllDistinctFields();

}

Но я всегда получаю Exception «Ожидается, что запрос, возвращающий примитивный тип, вернет ровно 1 результат»

org.springframework.data.couchbase.core.CouchbaseQueryExecutionException: Query returning a primitive type are expected to return exactly 1 result, got 100014
  at org.springframework.data.couchbase.repository.query.AbstractN1qlBasedQuery.executeSingleProjection(AbstractN1qlBasedQuery.java:193)
  at org.springframework.data.couchbase.repository.query.AbstractN1qlBasedQuery.executeDependingOnType(AbstractN1qlBasedQuery.java:134)
  at org.springframework.data.couchbase.repository.query.AbstractN1qlBasedQuery.execute(AbstractN1qlBasedQuery.java:93)

Есть ли способ вернуть только все поля, а не целые объекты? Если я попробую выполнить запрос «выберите отдельные артикулы из backinstock»; в графическом интерфейсе Couchbase все работает нормально!

Кстати, я работаю с spring-data-couchbase 2.1.5 и Couchbase 4.5.1-2844.


person Kris    schedule 11.01.2017    source источник


Ответы (1)


В версии Spring data Ingalls 2.2.0-RC1 есть поддержка проекций, которые могут извлекать определенные поля объекта. Справочная документация находится здесь http://docs.spring.io/spring-data/couchbase/docs/2.2.0.RC1/reference/html/#_dto_projection

person subhashni    schedule 12.01.2017