1

モルフィアを使用して参照ドキュメント/エンティティの 2 つの属性を読み込む方法


この人のクラスのようなクラスの人と学校があります

@Entity
public class Person {
  @Id private ObjectId id;
  private String name;
  @Embedded private PersonEducation schoolInfo;
}
@Embedded
public class PersonEduction {
  @Reference private School school;
  private String year;
  private String degree;
}


学校のクラス

@Entity
public class School {
   @Id private ObjectId id;
   private String name;
   private String address;
   private String description;
}

Person クラスの例で School の id フィールドと name フィールドを取得する方法

Person person = datastore.find(Person.class).field("name").equals("xyz").get();
person.gerSchoolInfo();

回答 (School クラスのすべてのフィールドは必要ありません)

{school:{_id:ObjectId("4fcef3e20364a375e7631fb0"), name:"SchoolA"}, year:"1990", degree:"MBA" }

_id=ObjectId("4fcef3e20364a375e7631fb0") で学校をクエリすると、すべての学校フィールドが取得されます

{_id:ObjectId("4fcef3e20364a375e7631fb0"), name:"xyz", address="some add", description="some desc"}
4

2 に答える 2

1

使用する代わりに使用@Referenceする必要があります

key<School> school;

カスタムクエリを使用してロードします。

datastore.createQuery(School.class).retrivedFields(true, "id","name");
于 2012-06-08T12:02:15.063 に答える
0

mtariq に代わるものを与えるには、次のように置き換えます。

@Reference private School school;

private ObjectId schoolId;

そしてそれを自分で取得します。ただし、学校のクラスは非常に単純なので、遅延読み込みを使用した方がよいと思います。

@Reference @Lazy private School school;

これは、学校オブジェクトが参照されている場合にのみ読み込まれます。

于 2012-06-08T13:47:36.653 に答える