Morphiaがクエリ結果からドキュメントを読み取っているとき、最初に行うことは、エンティティの新しいインスタンスStudent
を作成することです。 。引数なしのコンストラクターを呼び出すだけです。魔法は関係ありません。 cityフィールドは値で初期化されます。それが完了すると、Morphiaはデータベースから返されたドキュメントの各キーを取得し、そのマップされたフィールドを見つけて設定します。あなたの場合、ドキュメントに都市キーがないため、初期化された値をそのままにして、Morphiaがフィールドを設定することはありません。
一般に、このようなエンティティのフィールドを初期化することは悪い習慣です。データベースからロードされたすべてのエンティティについて、JVMは、後で上書きするためにのみ、これらのフィールドをある値に初期化する必要があります。特定のフィールドがクエリ結果に戻らない場合など、Morphiaが新しいインスタンスをアプリケーションに返した後も、これらの値は残ります。