我在HRD Google应用引擎数据存储区中使用嵌套实体组。
A&lt; B&lt; C考虑到X < Y表示X是Y的父级
所有C是否在同一个实体组中(一个)?
我想查询所有具有相同父母A的C.我该怎么做?
这是失败的: SELECT * FROM C WHERE ANCESTOR是Key('A',1)
任何提示?
测试已直接在数据存储区的GQL中完成,无论如何,我附上代码片段(Ofy4代码):
那是A:
@Entity
@Cache
public class Site implements Serializable {
private static final long serialVersionUID = 8611281648072797702L;
@Id
private Long id;
private String url;
...
}
那是B:
@Entity
@Cache
public class Accom implements Serializable, HasCapacity {
@Id
private Long id;
@Parent
private Key<Site> site;
...
}
那是C:
@Entity
@Cache
public class Room implements Serializable, HasCapacity {
@Id
private Long id;
@Parent
private Key<Accom> accom;
...
}
答案 0 :(得分:2)
根据谷歌文档,这应该有效。
和http://code.google.com/appengine/docs/python/datastore/queries.html
Ancestor Queries
您可以将数据存储区查询过滤到指定的祖先,以便结果仅包含包含该祖先的实体。换句话说,所有结果都将祖先作为其父级或父级的父级或等等。将None作为参数传递不会查询没有祖先的实体并返回错误。
其他有用信息的链接: http://code.google.com/appengine/docs/python/datastore/gqlreference.html#Examples http://code.google.com/appengine/docs/python/datastore/entities.html
答案 1 :(得分:0)
问题解决了:
问题是在创建C时,父键被错误地创建。 C的父键是K(B),它应该是K(A,B),总是包含父。
就像那样可以引用实体组。需要引用A,因为尽管有嵌套,但只有一个实体组。