【发布时间】:2011-10-20 02:18:41
【问题描述】:
我是 Objectify 的新手,正在尝试实现一对多关系。我有实体 Organization 和实体 Person。组织有@Transient 属性List@Parent 属性 Key organizationKey 我可以通过 setter 设置。
我想在组织的@PrePersist 处理程序中坚持contactPeople。为此,我需要在 Person 中设置父键。
Wiki here 说:“您不能在 @PrePersist 回调中更新 @Id 或 @Parent 字段;此时,低级实体已经使用完整的 Key 构造,因此它可以作为可选参数传入。”
我不确定这仍然是准确的信息吗?因为我在PrePersist 处理程序中获得的com.google.appengine.api.datastore.Entity 对象的键具有字面意思是“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
}
Here正在改进新版本的设计文档。
这是个大新闻。 Twig 作者 John Patterson 今天加入了 Objectify 项目。
【问题讨论】:
-
出于好奇,我这样做了:
@PrePersist void onPersist(Objectify ofy) { if (id == null) id = ofy.getFactory().allocateId(getClass()); }。事实证明,这个分配的 ID 被我分配的数字所覆盖,这使我得出这样的结论,即 Wiki 已过时并且 Key 是在 PrePersist 事件之后构建的。伤心。 -
Objectify 的作者 Jeff Schnitzer 回答了我的问题。 “我通常认为将持久性操作放在实体 pojo 中是一个坏主意。这就是原因之一。这些信息是准确的。你不能按照你的建议去做。我想不出一个临时的解决方法。杰夫"
标签: java google-app-engine persistence entity-relationship objectify