Объективировать запрос в транзакции с предком и фильтром по ключу одновременно возвращает 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;
}

Затем я пытаюсь получить ВСЕ B-объекты в ТРАНЗАКЦИИ с предком (TopParent) и некоторым ссылочным ключом C, но он продолжает возвращать 0 элементов.

Это мой запрос: List> bKeys = oft.query(B.class).ancestor(TopParent).filter("referenceKeyToC", новый ключ(C.class), b.referenceKeyToC).listKeys();

Когда я СОХРАНЯЮ B, у него правильно установлены оба родителя и referenceKeyToC.

ЕСЛИ я запускаю запрос без фильтра ключей, например: List> bKeys = oft.query(B.class).ancestor(TopParent).listKeys();

Он возвращает все B-объекты, и все эти B-объекты содержат их referenceKeyToC
Есть идеи??

Джеспер


person Community    schedule 28.05.2012    source источник


Ответы (1)


Это почти наверняка проблема индексации. Чтобы этот запрос работал, вы должны определить два индекса:

  • Индекс с одним свойством для referenceKeyToC
  • Индекс с несколькими свойствами для {ancestor, referenceKeyToC}

В Objectify 3.x свойства по умолчанию имеют индексы с одним свойством, но если вы добавили @Unindexed в класс B, вам нужно поместить @Indexed в referenceKeyToC.

Индекс с несколькими свойствами определяется в файле datastore-indexes.xml. Если вы запустите этот запрос в режиме разработки, среда должна предоставить вам необходимый фрагмент XML.

person stickfigure    schedule 28.05.2012
comment
Супер-отлично - действительно отсутствовал индекс в ReferenceToCKey - person ; 28.05.2012