在GoogleEngine(Java)上,在JDO中,如何根据父对象的id查询子对象列表?
我有两个值对象,日历和事件,它们是持久的。Calendar的属性包含在事件列表中,具有一对多关系。日历是事件的父级,如下所示在GoogleEngine(Java)上,在JDO中,如何根据父对象的id查询子对象列表?,java,google-app-engine,parent-child,jdo,Java,Google App Engine,Parent Child,Jdo,我有两个值对象,日历和事件,它们是持久的。Calendar的属性包含在事件列表中,具有一对多关系。日历是事件的父级,如下所示 @Persistent @Element(dependent = "true") private List<Event> events; @Persistent @元素(dependent=“true”) 私人列表活动; 现在,我希望能够通过JDO查询,根据Calendar对象键检索与日历对应的事件。我在两个类中都使用encodedKey 我希望在事件实体
@Persistent
@Element(dependent = "true")
private List<Event> events;
@Persistent
@元素(dependent=“true”)
私人列表活动;
现在,我希望能够通过JDO查询,根据Calendar对象键检索与日历对应的事件。我在两个类中都使用encodedKey
我希望在事件实体上运行查询,而不仅仅是检索整个日历对象,因为出于分页的目的,我希望仅检索一组事件
我试图以任何可能的方式执行此操作,但不知道如何通过父键进行查询
任何帮助都将不胜感激。请注意:
实体中的列表属性(如列表事件
)存储为序列化协议缓冲区。问题是:
query.set祖先(Key calendarKey)
更新:应使用实体父关系创建“实体组”,例如,交易范围所在的单位Peter,您的解决方案是使用普通数据存储API查询,而不是JDO。我真的找到了方法。JDO支持对子对象的属性(如parentKey)进行注释。这是由JDO自动处理的,不需要编程。请参见以下内容:@Persistent@Extension(vendorName=“datanucleus”,key=“gae.parent pk”,value=“true”)私有字符串parentKey;关于5000上限,这究竟意味着什么?这是否意味着父类的一个实例最多只能有5000个事件的事件列表。谢谢?准确地说:每个实体都限制为5000个索引项。每个列表属性元素都会生成一个索引项(如果已编制索引的话)。我不喜欢JDO,因为它试图欺骗开发人员数据存储是SQL数据库。在我们的项目中,我们使用Objectify:@oviroa@Peter的建议仍然有效:与其让
日历
列出事件
实体,不如让每个事件
参考日历。请注意,这是相反的,不是除了。此外,没有理由将密钥存储为字符串-直接将其存储为密钥,数据存储支持它。