2015-01-20 21 views
5

Używamy repozytoriów danych sprężynowych do przechowywania/pobierania dokumentów. Poniżej znajduje się struktura Java klas, które mamy: Klasa abstrakcyjna A -> klasy betonu B i C Piszemy dokumenty za pomocą metody save(). kiedy dokument jest zapisywany, zapisywana jest zmienna "_class", która przechowuje klasę ClassPath. Teraz, gdy próbujemy przesyłać zapytania do danych, otrzymujemy dokumenty obu klas B i C. Oto przykład:Wyszukiwanie danych sprężynowych według wartości "_class"

Kiedy nazywamy tę metodę, lista (zaskakująco) zawiera również obiekty C. Być może dlatego, że B i C mają jedną właściwość, która ma taką samą nazwę. Moje pytanie brzmi: jeśli chcemy ograniczyć wynik do konkretnej klasy, czy jest to możliwe przy użyciu repozytorium Mongo? Próbowaliśmy z findBy_Class, findByClass, ale wyrzucił wyjątek mówiąc, że nie był w stanie znaleźć elementu "class" w "B".

Czy typ powrotu (np. Lista < B>) nie pomaga filtrować obiektów? Jakieś pomysły?

Z góry dziękuję.

Odpowiedz

0

W obiekcie zapytania znajduje się metoda "restrict", która zwraca tylko obiekty danego typu. http://docs.spring.io/spring-data/mongodb/docs/current/api/index.html?org/springframework/data/mongodb/core/MongoOperations.html Przypuszczam, że można zrobić coś takiego:

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

Dzięki za odpowiedź. Używam obiektu operacji MongoRepository, a nie Mongo. Tak więc, po prostu zdefiniuję metody w interfejsie i te metody zostaną przekształcone w zapytania, jak wyjaśniono w tym adresie URL: http://docs.spring.io/spring-data/data-document/docs/current/reference/html/ # reositories.query-methods.query-lookup-strategie. Nie wiem, czy istnieje sposób na określenie klasy tutaj. –

Powiązane problemy