使用Ancestor在事务中对象查询和Key上的过滤器同时返回0个元素

时间:2012-05-28 09:34:32

标签: google-app-engine objectify

您好我正在使用Objectify,我有以下内容:

public static final Key<A> TopParent = new Key<A>(A.class,1)

class A {
}

class B {

 @Parent
 Key parent;

 Key referenceKeyToC 
}

class C {
  @Parent 
  Key parent;
}

然后我试图在带有Ancestor(TopParent)和一些参考键C的TRANSACTION中获取所有B对象 - 但它继续返回0个元素。

这是我的查询: 列表&gt; bKeys = oft.query(B.class).ancestor(TopParent).filter(“referenceKeyToC”,new Key(C.class),b.referenceKeyToC).listKeys();

当我保存B时,它已正确设置父和referenceKeyToC ..

如果我在没有密钥过滤器的情况下运行查询,例如: 列表&gt; bKeys = oft.query(B.class).ancestor(TopParent).listKeys();

它返回所有B对象 - 这些B对象都包含它们的referenceKeyToC
有任何想法吗??

的Jesper

1 个答案:

答案 0 :(得分:1)

这几乎肯定是一个索引问题。为了使该查询起作用,您必须定义两个索引:

  • referenceKeyToC上的单一属性索引
  • {ancestor,referenceKeyToC}
  • 上的多属性索引

在Objectify 3.x中,默认情况下属性具有单属性索引,但如果已将@Unindexed添加到B类,则需要将@Indexed放在referenceKeyToC上。

多属性索引在datastore-indexes.xml中定义。如果在开发模式下运行此查询,环境应该为您提供所需的xml片段。