Quando Morphia legge i tuoi documenti dai risultati della query, la prima cosa che fa è creare una nuova istanza della tua entità, Student
. Invoca semplicemente il costruttore no argument. Non c'è nessuna magia coinvolta. Il campo città viene inizializzato con un valore. Una volta fatto, Morphia prenderà ogni chiave nel documento restituito dal database, troverà il campo mappato e lo imposterà. Nel tuo caso, non c'è la chiave della città nel documento e quindi quel campo non viene mai impostato da Morphia lasciando il valore inizializzato al suo posto.
In generale, inizializzare i campi su entità come questa è una cattiva pratica. Per ogni entità caricata dal database, la JVM deve inizializzare quei campi su un valore solo per sovrascriverli in seguito. Nei casi come il tuo in cui alcuni campi non tornano nel risultato di una query, quei valori rimangono dopo che Morphia ha restituito le nuove istanze alla tua applicazione.