MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Repozytorium Spring automatycznie rzuca encje z różnymi typami klas

Dla obu repozytoriów możesz użyć @Query adnotacja określająca ciąg zapytania MongoDB JSON, który będzie używany zamiast zapytania pochodzącego z nazwy metody (musisz wiedzieć, że istnieje konwencja parsowania nazw metod repozytorium i budowania zapytań MongoDB).

Tak więc, używając @Query , możesz zrobić:

@Repository
public interface ManagerRepository extends MongoRepository<Employee, String>

  @Query(value="{ '_class' : 'com.igmtechnology.gravity.core.init.test.Manager' }")
  List<Person> findAllManagers();

}

Za kulisami wygeneruje to zapytanie podobne do tego:

db.person.findAll({'_class' ; 'com.igmtechnology.gravity.core.init.test.Manager'});

Jednak z tym kodem jest drobny problem. Jeśli zmienisz w pełni kwalifikowaną nazwę klasy Manager , zapytanie nie wyrzuci RuntimeException , ale nic nie zwrócił. W takim przypadku możesz użyć symbolu wieloznacznego w @Query .

@Query(value="{ '_class' : ?0 }")
List<Person> findAllManagers(String className);

Następnie, po wywołaniu metody, możesz po prostu zrobić:

managerRepository.findAllManagers(Manager.class.getName());

Dostarczony Manager.class.getName() zastąpi ?0 symbol wieloznaczny, a Twoje zapytanie zostanie poprawnie zbudowane.

To samo dotyczy Employee repozytorium z tą różnicą, że musisz podać w pełni kwalifikowaną nazwę klasy Employee w @Query value atrybut.

Więcej informacji:




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoError:Topologia jest zamknięta, połączenie wydaje się być powiązane z MongoClient.close() i klient nie będzie działał podczas jego używania

  2. Łączne wartości ze wszystkich kluczy w poddokumencie

  3. Jak zwrócić tylko wartość w MongoDB?

  4. Jak mogę utworzyć pole automatycznego przyrostu na meteorze?

  5. Dlaczego moja MongoDB $lub zapytanie nie działa?