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を保存すると、親と参照KeyToCの両方が正しく設定されています..

次のようなキー フィルターなしでクエリを実行した場合: List> bKeys = oft.query(B.class).ancestor(TopParent).listKeys();

それはすべての B オブジェクトを返します - そしてそれらの B オブジェクトはすべてそれらの referenceKeyToCを含みます
何かアイデアはありますか??

ジェスパー

4

1 に答える 1

1

これはほぼ間違いなくインデックスの問題です。このクエリを機能させるには、次の 2 つのインデックスを定義する必要があります。

  • referenceKeyToC の単一プロパティ インデックス
  • {ancestor, referenceKeyToC} のマルチプロパティ インデックス

Objectify 3.x では、プロパティにはデフォルトで単一プロパティ インデックスがありますが、@Unindexed をクラス B に追加した場合は、@Indexed を referenceKeyToC に配置する必要があります。

マルチプロパティ インデックスは、datastore-indexes.xml で定義されます。このクエリを開発モードで実行すると、必要な xml のスニペットが環境から提供されます。

于 2012-05-28T13:43:19.127 に答える