Read the last bullet point here: http://code.google.com/p/objectify-appengine/wiki/Concepts?tm=6#Indexes
You've stumbled across one of the quirks of appengine - entities do not participate in a multi-property index unless every individual property also participates in a single-property index. Star this issue: http://code.google.com/p/googleappengine/issues/detail?id=4231 Jeff On Mon, Apr 25, 2011 at 11:14 AM, Braam Smith <[email protected]> wrote: > Hi I'm building my first GAE app, starting from the bottom up (i.e. > datastore first). AppEngine SDK 1.4.3 via Google Plugin for Eclipse > Helios 3.6.1, with Objectify 2.2.3 to abstract datastore interactions. > > I haven't yet used the dev server as I haven't yet built the web front- > end that will use this first DAO I've developed. This is largely > because of the discovery in the AppEngine docs of the "Local Unit > Testing" capabilities, in particular: > > com.google.appengine.tools.development.testing.LocalServiceTestHelper > and > com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig > > (http://code.google.com/appengine/docs/java/tools/ > localunittesting.html) > > Short story for the uninitiated is that instead of running the dev > server and having dev data progressively persisted to disk (i.e. the > "Dev" datastore), the "Test" datastore is by default in-memory only > and its contents cleared between JUnit @Test cases. > > My problem is that the "Test" datastore does not seem to honour the / > war/WEB-INF/datastore-indexes.xml file. My DAO includes a method that > queries an entity using a composite (2 field) index, which is > specified in the index config file, but the query through Objectify to > the "Test" datastore doesn't find the record. > > HOWEVER, if I individually index the two columns that make up my > composite index (done in Objectify by adding the @Indexed annotation > to the corresponding fields within an @Unindexed entity), the query > through Objectify that filters on both these fields successfully > returns the record from the "Test" datastore. > > So whilst I can work around it, this will result in needing two > indexes to support the one query when I should be able to get it to > work with one pre-specified in the index config. Not a major issue > now, but inevitably there will be a large entity set that I will need > to query with many columns and unnecessarily duplicating these indexes > just so my JUnits can work is not desirable. > > I'm now re-evaluating whether this "Test" datastore is worth investing > any more effort in pursuing. This is a shame because the concept is > spot on. > > Other suspicions I have about the completeness of the implementation > of the LocalDatastoreServiceTestConfig with respect to pre-configured > indexes are: > 1. A call to LocalDatastoreServiceTestConfig.setNoIndexAutoGen(false) > forces the local environment to write the Auto Index Configuration > file, however even when I had no datastore-indexes.xml file, and > performed this 2-field filtering query, the contents of the datastore- > indexes-auto.xml file that was written was an empty <datastore- > indexes /> root element. > 2. The location of the datastore-indexes-auto.xml file written in #1 > above was to /WEB-INF/appengine-generated in my workspace, whereas the > docs (http://code.google.com/appengine/docs/java/config/ > indexconfig.html) indicates the dev server would write this to /war/ > WEB-INF/appengine-generated > > Has anyone had any success in using composite indexes with the "Test" > Datastore, or with the generation of the Auto Index Configuration? > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/google-appengine?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
