Wenn Morphia Ihre Dokumente aus den Abfrageergebnissen liest, erstellt es als Erstes eine neue Instanz Ihrer Entität, Student
. Es ruft nur den No-Argument-Konstruktor auf. Es ist keine Magie im Spiel. Das Stadtfeld wird mit einem Wert initialisiert. Sobald dies erledigt ist, nimmt Morphia jeden Schlüssel in dem Dokument, das von der Datenbank zurückgegeben wird, findet dieses zugeordnete Feld und setzt es. In Ihrem Fall gibt es keinen Stadtschlüssel im Dokument und daher wird dieses Feld nie von Morphia gesetzt, wobei der initialisierte Wert beibehalten wird.
Im Allgemeinen ist das Initialisieren von Feldern auf solchen Entitäten eine schlechte Praxis. Für jede aus der Datenbank geladene Entität muss die JVM diese Felder mit einem bestimmten Wert initialisieren, nur um sie später zu überschreiben. In Fällen wie Ihrem, in denen bestimmte Felder in einem Abfrageergebnis nicht zurückkommen, bleiben diese Werte erhalten, nachdem Morphia die neuen Instanzen an Ihre Anwendung zurückgibt.