1

嗨,我正在使用 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 个元素。

这是我的查询: List> bKeys = oft.query(B.class).ancestor(TopParent).filter("referenceKeyToC", new Key(C.class), b.referenceKeyToC).listKeys();

当我保存 B 时,它的 parent 和 referenceKeyToC 都设置正确..

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

它返回所有 B 对象 - 并且那些 B 对象都包含它们的 referenceKeyToC 有
什么想法吗?

杰斯珀

4

1 回答 1

1

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

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

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

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

于 2012-05-28T13:43:19.127 回答