user382211
user382211

Reputation:

Objectify query in transaction with Ancestor and a filter on Key at the same time returns 0 elements

Hi I am using Objectify and I have the following:

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;
}

I am then trying to get ALL B-objects in an TRANSACTION with Ancestor(TopParent) and some Reference Key C - but it keep returning 0 elements.

This is my query: List> bKeys = oft.query(B.class).ancestor(TopParent).filter("referenceKeyToC", new Key(C.class), b.referenceKeyToC).listKeys();

When I SAVE B it has BOTH parent and referenceKeyToC set correctly ..

IF I run the Query without the Key Filter like: List> bKeys = oft.query(B.class).ancestor(TopParent).listKeys();

It returns all the B-objects - and those B-objects all Contains their referenceKeyToC
Any ideas??

Jesper

Upvotes: 1

Views: 735

Answers (1)

stickfigure
stickfigure

Reputation: 13556

This is almost certainly an indexing issue. In order for that query to work, you must define two indexes:

  • A single-property index on referenceKeyToC
  • A multi-property index on {ancestor, referenceKeyToC}

In Objectify 3.x, properties have single-property indexes by default, but if you have added @Unindexed to the class B then you need to put @Indexed on referenceKeyToC.

The multi-property index is defined in datastore-indexes.xml. If you run this query in dev mode, the environment should provide you with the snippet of xml needed.

Upvotes: 1

Related Questions