Wanneer Morphia uw documenten leest uit de queryresultaten, is het eerste wat het doet een nieuw exemplaar van uw entiteit maken, Student
. Het roept gewoon de no argument constructor aan. Er komt geen magie bij kijken. Het stadsveld wordt geïnitialiseerd met een waarde. Zodra dat is gebeurd, neemt Morphia elke sleutel in het document dat is geretourneerd uit de database, zoekt dat toegewezen veld en stelt het in. In jouw geval is er geen stadssleutel in het document en dus wordt dat veld nooit ingesteld door Morphia, waarbij de geïnitialiseerde waarde op zijn plaats blijft.
Over het algemeen is het een slechte gewoonte om velden op dergelijke entiteiten te initialiseren. Voor elke entiteit die uit de database wordt geladen, moet de JVM die velden initialiseren naar een bepaalde waarde om ze later te overschrijven. In gevallen zoals het uwe waar bepaalde velden niet terugkomen in een queryresultaat, blijven die waarden behouden nadat Morphia de nieuwe instanties terugstuurt naar uw toepassing.