2015-01-20 9 views
5

Stiamo utilizzando i repository di dati primavera mongo per memorizzare/recuperare i documenti. Di seguito è la struttura delle classi Java abbiamo ottenuto: astratta classe A -> Calcestruzzo classi B e C Stiamo scrivendo i documenti utilizzando il metodo save(). quando un documento viene salvato, viene salvata la variabile "_class" che memorizza classPath. Ora, quando proviamo a interrogare i dati, otteniamo i documenti di entrambe le classi B e C. Di seguito è riportato l'esempio:dati Primavera trovano per valore "_class"

public List<B> findByName (String name); 

Quando chiamiamo questo metodo, l'elenco (sorprendentemente) contiene gli oggetti di C pure. Può essere perché B e C hanno una proprietà che ha lo stesso nome. La mia domanda è, se vogliamo limitare il risultato a una classe specifica, è possibile utilizzare il repository Mongo? Abbiamo provato con findBy_Class, findByClass ma ha lanciato un'eccezione dicendo che non era in grado di trovare il membro "class" in "B".

non Qualora il tipo di ritorno (ad esempio Elenco < B>) aiutare il filtraggio degli oggetti? Qualche idea?

Grazie in anticipo.

risposta

0

sull'oggetto query c'è un metodo "limitare", che restituisce solo gli oggetti di un certo tipo. http://docs.spring.io/spring-data/mongodb/docs/current/api/index.html?org/springframework/data/mongodb/core/MongoOperations.html Immagino che si potrebbe fare qualcosa di simile:

query.restrict(B.class).findByName(...) 
+1

Grazie per la risposta. Sto usando MongoRepository e non l'oggetto di operazione Mongo. Così, mi limiterò a definire i metodi di interfaccia e di questi metodi sarà trasformata in query come spiegato in questo URL: http://docs.spring.io/spring-data/data-document/docs/current/reference/html/ # repositories.query-methods.query-lookup-strategie. Non so se c'è un modo per specificare la classe qui. –