0

我在 HRD 谷歌应用引擎数据存储中使用嵌套实体组。

A < B < C 考虑 X < Y 意味着 X 是 Y 的父级

所有 C 都在同一个实体组(A 一个)中吗?

我想查询所有具有相同父 A 的 C。我该怎么做?

这是失败的:SELECT * FROM C WHERE ANCESTOR IS Key('A',1)

任何提示?

测试已直接在数据存储区的 GQL 中完成,无论如何,我附上代码片段(Ofy4 代码):

这是一个:

@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;
   ...
}
4

2 回答 2

2

根据谷歌文档,这应该可以。

http://code.google.com/appengine/docs/python/datastore/queries.html

祖先查询

您可以将数据存储查询过滤到指定的祖先,以便结果仅包含包含该祖先的实体。换句话说,所有结果都将祖先作为其父级或父级的父级等。将 None 作为参数传递不会查询没有祖先的实体,并且会返回错误。

其他包含有用信息的链接:http: //code.google.com/appengine/docs/python/datastore/gqlreference.html#Examples http://code.google.com/appengine/docs/python/datastore/entities.html

于 2012-03-19T15:56:01.587 回答
0

问题解决了:

问题是在创建 C 时,错误地创建了父键。C 的父键是 K(B),它应该是总是包含父键的 K(A,B)。

就是这样,所以可以引用实体组。需要对 A 的引用,因为尽管存在嵌套,但只有一个实体组。

于 2012-03-22T09:27:04.187 回答