MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Пролетното хранилище автоматично прехвърля обекти с различни типове класове

И за двете хранилища можете да използвате @Query анотация, за да посочите MongoDB JSON низ на заявка, който ще се използва вместо заявка, получена от името на метода (трябва да знаете, че има конвенция за анализиране на имената на методите на хранилището и за изграждане на MongoDB заявки).

И така, с помощта на @Query , можете да направите:

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

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

}

Зад кулисите това ще генерира заявка, подобна на тази:

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

Има обаче малък проблем с този код. Ако промените пълното име на клас Manager , тогава заявката няма да хвърли RuntimeException , но няма да върне нищо. В този случай можете да използвате заместващ знак в @Query .

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

След това, когато извикате метода, можете просто да направите:

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

Предоставеният Manager.class.getName() ще замени ?0 заместващ знак и вашата заявка ще бъде изградена правилно.

Същото важи и за Employee хранилище с тази разлика, че трябва да предоставите напълно квалифицираното име на клас на Employee в @Query value на атрибут.

Повече информация:




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да създадете потребител и да добавите роля в MongoDB

  2. pymongo auth не успя в скрипт на python

  3. MongoDB структура за приложение за съобщения

  4. Изпълнете собствена заявка за mongodb с драйвер за mongodb java

  5. Заявка за MongoDB с помощта на „ObjectId“