2015-01-20 4 views
5

Wir verwenden Spring Data Mongo-Repositories zum Speichern/Abrufen von Dokumenten. Es folgt die Java-Struktur der Klassen, die wir haben: Abstrakte Klasse A -> Betonklassen B und C Wir schreiben die Dokumente mit der Methode save(). Wenn ein Dokument gespeichert wird, wird die Variable "_class" gespeichert, in der der Klassenpfad gespeichert wird. Jetzt, wenn wir versuchen, die Daten abzufragen, erhalten wir die Dokumente der Klassen B und C. Im Anschluss an das Beispiel:Spring Daten finden durch "_class" Wert

public List<B> findByName (String name); 

Wenn wir diese Methode aufrufen, wird die Liste (überraschend) als auch die Objekte von C enthält. Es kann sein, weil B und C eine Eigenschaft haben, die denselben Namen hat. Meine Frage ist, wenn wir das Ergebnis auf bestimmte Klassen beschränken möchten, ist es möglich, Mongo-Repository zu verwenden? Wir haben es mit findBy_Class, findByClass versucht, aber es wurde eine Ausnahme ausgelöst, die besagt, dass es kein "Klassenmitglied" in "B" gefunden hat.

Sollte der Rückgabetyp (z. B. Liste < B>) helfen, die Objekte zu filtern? Irgendwelche Ideen?

Vielen Dank im Voraus.

Antwort

0

Auf dem Abfrageobjekt gibt es eine "restrict" -Methode, die nur Objekte eines bestimmten Typs zurückgibt. http://docs.spring.io/spring-data/mongodb/docs/current/api/index.html?org/springframework/data/mongodb/core/MongoOperations.html Ich nehme an, Sie so etwas tun könnte:

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

Danke für die Antwort. Ich benutze MongoRepository und nicht Mongo Operationsobjekt. Also, ich werde nur die Methoden in der Schnittstelle definieren und diese Methoden werden in Abfragen umgewandelt, wie in dieser URL erklärt: http://docs.spring.io/spring-data/data-document/docs/current/reference/html/ # repositories.query-methods.query-lookup-strategies. Ich weiß nicht, ob es eine Möglichkeit gibt, die Klasse hier anzugeben. –

Verwandte Themen