2016-02-11 47 views
9

Ho uno strano problema per i repository mongodb di dati di primavera .. Voglio escludere un campo dalla mia richiesta findAll. Come posso raggiungere questo obiettivo ?Spring data mongodb repository findAll field exclusion

Questo funziona perfettamente:

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

Ma nessuna possibilità per findAll:

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

Questo getta:

causati da: org.springframework.data.mapping.PropertyReferenceException : No proprietà findTrovati per tipo Obje ctHistory! a org.springframework.data.mapping.PropertyPath. (PropertyPath.java:75) a org.springframework.data.mapping.PropertyPath.create (PropertyPath.java:327) a org.springframework.data.mapping .PropertyPath.create (PropertyPath.java:307) a org.springframework.data.mapping.PropertyPath.from (PropertyPath.java:270) a org.springframework.data.mapping.PropertyPath.from (PropertyPath.java : 241) a org.springframework.data.repository.query.parser.Part (Part.java:76)

risposta

3

calcolata. un vuoto criteri di filtro farà il trucco per voi:

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

quanto pare, quando non si specifica il parametro value per filtrare i risultati, Primavera Dati cerca di ricavare una query dal nome del metodo e in qualche modo, non riconosce il significato speciale di findAll.

+0

Ma io non farlo, funziona come il mio in altra funzione –

+0

Grazie per l'aiuto comunque! –

+0

Nell'altro caso, la query è derivabile dal nome del metodo. –

2

Dal momento che non stanno fornendo un valore di campo per l'annotazione @query, Primavera cercherà di convertire il nome del metodo findAll a una query che non adempie ai Query Creazione specifica a partire dalla primavera. Vedi le specifiche here.

Questo dovrebbe funzionare per voi:

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

Questa è un'idea valida ma è 'MongoDB' non' JPA', quindi non puoi usare 'JPQL'. –

+0

In realtà è possibile, Spring si convertirà nell'archivio dati sottostante. Vedere [questo esempio] (http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#repositories.query-streaming) dalla documentazione ufficiale di Spring Data Mongo. – omahjoub

+0

La prima parte di questo documento intendeva essere generale, ma usava esempi specifici di 'JPA' per il bene della dimostrazione. Tutto dopo http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#reference è per mongo –