HRD数据存储区中的嵌套实体组

时间:2012-03-19 15:48:24

标签: google-app-engine transactions google-cloud-datastore objectify gql

我在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;
   ...
}

2 个答案:

答案 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,因为尽管有嵌套,但只有一个实体组。