使用 Objectify 和 RequestFactory 创建具有一对多关系的对象的适当方法是什么?我已经阅读了这些库的文档,还查看了一些示例项目,例如listwidget和gwtgae2011。他们都使用@Embedded
注释,这不是我想要的,因为它将所有内容都存储在一个实体中。根据文档的另一个选择是@Parent
在子类中使用属性。在我的示例中(为简单起见,删除了 getter/setter)我有实体Person
并将Organization
其定义为
@Entity
public class Person extends DatastoreObject
{
private String name;
private String phoneNumber;
private String email;
@Parent private Key<Organization> organizationKey;
}
和
@Entity
public class Organization extends DatastoreObject
{
private String name;
private List<Person> contactPeople;
private String address;
}
现在,如果我正确理解了文档以便将组织与一个人持久化,我必须首先持久化组织,然后设置organizationKey
为ObjectifyService.factory().getKey(organization)
Person 对象,然后将其持久化。我已经不喜欢我必须手动遍历每个子对象,但是由于代理类的存在,使用 RequestFactory 会使一切变得更加复杂。我将如何定义组织和组织代理类 - 使用 Key<> 或没有它?我必须在 Organization 中定义类似的东西吗?
public void setContactPeople(List<Person> contactPeople)
{
for (int i = 0; i < contactPeople.size(); ++i)
{
DAOBase dao = new DAOBase();
Key<Organization> key = dao.ofy().put(this);
contactPeople.get(i).setOrganizationKey(key);
}
this.contactPeople = contactPeople;
}
以及如何从 Datastore 加载 Organization 及其子项?我是否必须手动获取每个 Person 并在方法中填写 Organization.contactPeople @PostLoad
?
似乎我必须编写大量维护代码才能完成 JPA/JDO 在幕后所做的事情。我只是不明白:(
我是否遗漏了什么,或者这是实现它的唯一方法?
非常感谢提前回答!!!