0

我是 Objectify 的新手,并试图实现一对多的关系。我有实体Organization和实体Person。组织具有@Transient属性List< Person > contactPeople。类 Person 具有@Parent属性Key< Organization > organizationKey,我可以通过 setter 设置它。

我想在组织的处理程序中坚持contactPeople@PrePersist。为此,我需要在 Person 中设置父键。

此处的Wiki说:“您无法在 @PrePersist 回调中更新 @Id 或 @Parent 字段;此时,已经使用完整的 Key 构造了低级实体,因此可以将其作为可选参数传入。 "

我不确定这仍然是准确的信息吗?因为com.google.appengine.api.datastore.Entity我在处理程序中获得的对象的PrePersist键具有字面上说“no-id-yet”的键。

你将如何实现这一点?

谢谢!

2011 年 11 月 17 日更新:

在新的 Objectify4 中,我们将能够像这样进行半自动关系:

class Beastie {
   @Parent
   @Load
   ParentThing parent;

   @Id Long id;

   @Load({"bigGroup", "smallGroup"})
   SomeThing some;

   @Load("bigGroup")
   List<OtherThing> others;

   @Load
   Ref<OtherThing> refToOtherThing;

   Ref<OtherThing> anotherRef;  // this one is never fetched automatically
}

是新版本的不断发展的设计文件。

这是个大新闻。Twig作者 John Patterson 今天加入了 Objectify 项目。

4

1 回答 1

1

嗯,看来你需要在你的数据模型前面做一个道。因此,您将能够执行以下操作:

Organization organization = ...
List<Person> people = ...
ob.put(organization)
for (Person person: people) {
    person.organizationKey = organization.getKey();
    ob.put(person);
    organization.contactPeopleKeys.add(person.getKey());
}
ob.put(organization)

GAE+Objectify 需要自己的代码来处理很多事情,所以很常见

于 2011-10-20T06:11:13.143 回答