Então aqui está a história:adicionamos o tipo por padrão como algum tipo de dica de qual classe instanciar na verdade. Como você precisa inserir um tipo para ler o documento via
MongoTemplate
de qualquer forma, existem duas opções possíveis:- Você entrega um tipo ao qual o tipo armazenado real pode ser atribuído. Nesse caso, consideramos o tipo armazenado, use-o para a criação do objeto. Um exemplo clássico aqui é fazer consultas polimórficas. Suponha que você tenha uma classe abstrata
Contact
e suaPerson
. Você pode então consultarContact
se nós essencialmente temos que determine um tipo para instanciar. - Se você - por outro lado - passar em um tipo completamente diferente, nós simplesmente empacotamos para aquele determinado tipo, não para aquele armazenado no documento na verdade. Isso cobriria sua pergunta sobre o que acontece se você mover o tipo.
Você pode estar interessado em assistir a este ticket que cobre algum tipo de estratégia de mapeamento de tipo conectável para transformar as informações de tipo em um tipo real. Isso pode servir simplesmente para fins de economia de espaço, pois você pode querer reduzir um nome de classe longo qualificado para um hash de algumas letras. Também permitiria cenários de migração mais complexos onde você poderia encontrar chaves de tipo completamente arbitrárias produzidas por outro cliente de armazenamento de dados e vinculá-las a tipos Java.