使用Objectify和RequestFactory创建具有一对多关系的对象的适当
使用Objectify和RequestFactory创建具有一对多关系的对象的适当方法是什么?我已经阅读了这些库的文档,还查看了一些示例项目,例如
listwidget和
gwtgae2011.所有这些都使用@Embedded注释,这不是我想要的,因为它将所有内容存储在一个实体中.根据文档的另一个选择是在子类中使用@Parent属性.在我的示例中(为简单起见,删除了getters / 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; } 现在,如果我正确理解文档以便使用一个Person持久化组织,我必须首先保持组织,然后将organizationKey设置为ObjectifyService.factory().getKey(组织)用于Person对象,然后保留它.我已经不喜欢我必须手动迭代每个子对象,但是使用RequestFactory会因为代理类的存在而使一切变得更复杂.如何定义Organization和OrganizationProxy类 – 使用Key<>还是没有?我是否必须在组织中定义这样的内容? 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加载组织及其子项?我是否必须手动获取每个Person并在@PostLoad方法中填写Organization.contactPeople? 看起来我不得不编写很多维护代码来执行JPA / JDO在幕后所做的事情.我根本得不到它:( 我错过了什么,或者这是实现它的唯一方法吗? 非常感谢您提前解答! 解决方法
只有当您要在针对本组织中的所有Person的事务中使用它时,才需要将其设置为@Parent.我确定这不是你想要的.
只需保存私钥< Organization>即可. organizationKey,当您需要为指定的组织查找Person时,按此字段过滤 至于加载所有引用的对象 – 是的,它是,你必须手动加载它.它是皮塔饼,但它不是很多代码. 此外,如果您的组织足够小,并且由数百人组成,则存在这种关系的不同方式.在这种情况下,您可以拥有List< Key< Person>> contactPeopleKey;,并通过现有的Key手动加载所有这些人,它比新查询加载快得多 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |