Kiedy Morphia odczytuje Twoje dokumenty z wyników zapytania, pierwszą rzeczą, jaką robi, jest utworzenie nowej instancji Twojej jednostki, Student
. Po prostu wywołuje konstruktora bez argumentów. Nie ma w tym żadnej magii. Pole miasta jest inicjowane wartością. Gdy to zrobisz, Morphia weźmie każdy klucz w dokumencie zwróconym z bazy danych, znajdzie zmapowane pole i ustawi je. W twoim przypadku w dokumencie nie ma klucza miasta, więc to pole nigdy nie jest ustawiane przez Morphię, pozostawiając zainicjowaną wartość na miejscu.
Ogólnie rzecz biorąc, inicjowanie pól na takich encjach jest złą praktyką. Dla każdej jednostki załadowanej z bazy danych maszyna JVM musi zainicjować te pola do określonej wartości tylko po to, aby je później nadpisać. W przypadkach takich jak Twój, w których pewne pola nie są zwracane w wyniku zapytania, wartości te pozostają po zwróceniu przez Morphię nowych instancji z powrotem do Twojej aplikacji.