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


嗨,我

正在使用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;
}

然后,我尝试使用祖先(TopParent)和一些引用键C获取事务中的所有B对象 - 但它一直返回0个元素。

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

当我保存 B 时,它正确设置了父项和引用键ToC..

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

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

杰斯珀

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

  • 引用键ToC上的单属性索引
  • {祖先,引用KeyToC}上的多属性索引

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

多属性索引在数据存储索引.xml中定义。 如果在开发模式下运行此查询,则环境应提供所需的 xml 代码段。

最新更新