0

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

甲<乙<Ç考虑X < Y表示的是X为Y

的父是否所有C中的相同的实体组(A之一)在?

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

此失败: SELECT * FROM C其中ANCESTOR IS密钥( '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; 
    ... 
} 
+0

它以什么方式'失败'?它是抛出一个异常,还是它没有返回你知道的实体在数据库中的实体?还有别的吗? – 2012-03-19 17:18:15

+0

添加到Adam所说的内容:您可以在执行查询和堆栈跟踪的位置发布代码片段(如果“失败”是例外) – alex 2012-03-19 17:44:20

+0

没有失败。该代码没有返回任何结果。我直接在产品中使用GQL进行测试。 – 2012-03-19 19:23:41

回答

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

+0

我认为相同,但它不:( – 2012-03-19 15:59:55

0

问题解决了:

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

就是这样,实体组可以被引用。由于尽管嵌套只有一个实体组,所以需要引用A.