MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Il repository Spring esegue automaticamente il cast di entità con diversi tipi di classe

Per entrambi i repository, puoi utilizzare @Query annotazione per specificare una stringa di query JSON MongoDB che verrà utilizzata al posto della query derivata dal nome del metodo (devi sapere che esiste una convenzione per l'analisi dei nomi dei metodi del repository e per la creazione di query MongoDB).

Quindi, usando @Query , puoi fare:

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

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

}

Dietro le quinte, questo genererà una query, simile a questa:

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

Tuttavia, c'è un piccolo problema con questo codice. Se modifichi il nome completo della classe di Manager , la query non genererebbe una RuntimeException , ma non restituirei nulla. In questo caso puoi utilizzare un carattere jolly all'interno di @Query .

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

Quindi, quando invochi il metodo, puoi semplicemente fare:

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

Il Manager.class.getName() fornito sostituirà il ?0 jolly e la tua query verrà creata correttamente.

Lo stesso vale per il Employee repository con la differenza che devi fornire il nome completo della classe di Employee nella @Query il value di attributo.

Maggiori informazioni: