sql >> Databáze >  >> NoSQL >> MongoDB

Úložiště Spring automaticky přenáší entity s různými typy tříd

Pro oba repozitáře můžete použít @Query anotace k zadání řetězce dotazu MongoDB JSON, který bude použit místo dotazu odvozeného z názvu metody (musíte vědět, že existuje konvence pro analýzu názvů metod úložiště a pro vytváření dotazů MongoDB).

Takže pomocí @Query , můžete:

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

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

}

V zákulisí to vygeneruje dotaz podobný tomuto:

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

S tímto kódem je však menší problém. Pokud změníte plně kvalifikovaný název třídy Manager , pak dotaz nevyvolá RuntimeException , ale nic by nevrátil. V tomto případě můžete použít zástupný znak v rámci @Query .

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

Poté, když metodu vyvoláte, můžete jednoduše:

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

Poskytnuté Manager.class.getName() nahradí ?0 zástupný znak a váš dotaz bude vytvořen správně.

Totéž platí pro Employee úložiště s tím rozdílem, že musíte zadat plně kvalifikovaný název třídy Employee v @Query value atribut.

Více informací:




  1. Jak vrátím pořadí příspěvků MongoDB podle času Oblíbené uživatelem?

  2. MongoDB + JS Datum posunuto -1 den

  3. Jak smažu vše v Redis?

  4. Upozornění:Nedefinovaná vlastnost:MongoDB\Driver\Manager::$mydb v [Cesta] na wamp serveru