2016-02-11 4 views
9

У меня есть странная проблема для репозиториев данных mongodb данных весны. Я хочу исключить поле из моего запроса findAll. Как я могу это достичь?Spring data mongodb repository findВсе поле исключение

Это отлично работает:

@Query(fields = "{'objectContentAsJson':0}") 
Page<ObjectHistory> findByObjectIdAndServiceIgnoreCase(String objectId, String service, Pageable pageable); 

Но нет шансов для findAll:

@Query(fields = "{'objectContentAsJson':0}") 
Page<ObjectHistory> findAll(Pageable pageable); 

Это бросает:

Вызванный: org.springframework.data.mapping.PropertyReferenceException : No property findВсе найденные объекты Тип Obje ctHistory! на org.springframework.data.mapping.PropertyPath. (PropertyPath.java:75) на org.springframework.data.mapping.PropertyPath.create (PropertyPath.java:327) на org.springframework.data.mapping .PropertyPath.create (PropertyPath.java:307) на org.springframework.data.mapping.PropertyPath.from (PropertyPath.java:270) на org.springframework.data.mapping.PropertyPath.from (PropertyPath.java : 241) на org.springframework.data.repository.query.parser.Part (Part.java:76)

ответ

3

Добавление. Пустую критерии фильтра будет делать трюк для вас:

@Query(value = "{}", fields = "{'objectContentAsJson':0}") 
Page<ObjectHistory> findAll(Pageable pageable); 

Видимо, когда вы не указываете параметр value для фильтрации результатов, Spring Data пытается получить запрос от имени метода и каким-то образом, не признает особый смысл findAll.

+0

Но я не понимаю, это работает, как у меня в другой функции –

+0

Спасибо за помощь в любом случае! –

+0

В другом случае запрос выводится из имени метода. –

2

Поскольку вы не обеспечиваете значения поля в к вашему @Query аннотации, Spring попытается преобразовать имя метода FindAll на запрос, не уважающая Спецификацию запросов Creation от Spring. Пожалуйста, смотрите характеристики here.

Это должно работать для вас:

@Query(value = "{}", fields = "{'objectContentAsJson':0}") 
Page<ObjectHistory> findAll(Pageable pageable); 
+0

Это правильная идея, но это 'MongoDB' не' JPA', поэтому вы не можете использовать 'JPQL'. –

+0

На самом деле вы можете, Spring перейдет в базовый хранилище данных. См. [Этот пример] (http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#repositories.query -streaming) из официальной документации Spring Data Mongo. – omahjoub

+0

Первая часть этого документа была общей, но использовала конкретные примеры JPA для демонстрации. Все после http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#reference для mongo –

Смежные вопросы