MongoDB如何使用morphia加载参考文档的两个属性

时间:2012-06-07 09:54:00

标签: java mongodb morphia

如何使用morphia

加载参考文档/实体的两个属性

我有这样的班级人员和学校
人类

@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;
}

我如何获得学校人员课程的id和名称字段 例 当我想要人时

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

回复(不想要所有学校班级字段)

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

如果我查询学校_id = ObjectId(" 4fcef3e20364a375e7631fb0"),我得到所有学校字段

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

2 个答案:

答案 0 :(得分:1)

您应该使用

而不是@Reference
key<School> school;

并使用自定义查询加载它。

datastore.createQuery(School.class).retrivedFields(true, "id","name");

答案 1 :(得分:0)

要替代mtariq,请替换

@Reference private School school;

private ObjectId schoolId;

并自己获取。但是,由于你的学校课程如此简单,我认为你最好使用延迟加载,所以:

@Reference @Lazy private School school;

这只会在/被引用时加载学校对象。