Khi Morphia đang đọc tài liệu của bạn từ kết quả truy vấn, điều đầu tiên nó làm là tạo một phiên bản mới của thực thể của bạn, Student
. Nó chỉ gọi hàm tạo không đối số. Không có ma thuật liên quan. Trường thành phố được khởi tạo với một giá trị. Sau khi hoàn tất, Morphia sẽ lấy từng khóa trong tài liệu được trả về từ cơ sở dữ liệu, tìm trường được ánh xạ đó và đặt nó. Trong trường hợp của bạn, không có khóa thành phố trong tài liệu và vì vậy trường đó không bao giờ được đặt bởi Morphia, để nguyên giá trị đã khởi tạo.
Nói chung, việc khởi tạo các trường trên các thực thể như thế này là một việc làm không tốt. Đối với mọi thực thể được tải từ cơ sở dữ liệu, JVM phải khởi tạo các trường đó thành một giá trị nào đó chỉ để ghi đè chúng sau này. Trong các trường hợp chẳng hạn như trường hợp của bạn trong đó các trường nhất định không quay lại trong kết quả truy vấn, các giá trị đó vẫn còn sau khi Morphia trả lại các bản sao mới cho ứng dụng của bạn.