Hi there, can anyone from Google shines some light on the issue I posted last week? I just need to find out if it is a major limitation on google's part with no workaround so that I can move forward accordingly. Thanks a lot.
On Oct 23, 11:01 am, king <kingalpha...@gmail.com> wrote: > Thanks so much for the feedback. I actually tried to extend the Key > CONTAINS concept to other fields but ran into a big wall right away. > It would be great to get your 2 cents. Here is the root of my > problem: > > I have a student object, it has a number of qualifying attributes, for > example: > int gpa: 1 = 0 to 2.0, 2 = 2.0 to 3.0, 3 = 3.0 to 4.0 > int ageGroup: 1 = 0 to 17, 2 = 18 to 30, 3 = 30 to 65, 4 = 65+ > ArrayList schoolPreference: [0] = 'MIT', [1] = 'Stanford', [2] = > 'Harvard', [3] = 'Yale' > > Now, I need to create a query to find out all the students where (gpa > = 2 or gpa = 3) AND (age group = 3 or age group = 4) AND > (schoolPreference contains MIT or Yale, or both) > > As far as I know, GAE doesn't support OR operator in a query, so the > only way I can get the query above to work is to have multiple sub- > queries and do a manual join on all the datastore resultsets to > artificially create a union. If so, big problem arises: > > Since I have so many OR sub-conditions, if every OR translates into a > separate sub-query, literally speaking, I need to do a full > permutation of all the conditions (full product of all the OR and AND > conditions) in all my sub-queries to achieve my goal, which doesn't > make any sense if I keep adding more value types (such as more schools > being selected in the student preference criteria) into my attributes, > not to mention adding more attributes to my student object. Is there > any way to accomplish this query in GAE? Your help is greatly > appreciated because this can be the deal breaker of whether my whole > project can migrate to GAE or not. Thanks a lot in advance. > > On Oct 23, 1:51 am, Yasuo Higa <higaya...@gmail.com> wrote: > > > > > Hi Andy, > > > >> query.setFilter("key == :keyList"); > > >> List<Master> list = (List<Master>) query.execute(keyList); > > > > I'd like to know if that works with GAE/J, because it is illegal JDOQL > > > syntax and would be a bug. JDOQL is supposed to follow Java syntax, > > > and you simply cannot do > > > Key == List<Key> > > > and get success in Java. > > > You are right, but unfortunately the above query works on GAE/J. > > > I should have recommended the following query: > > > List<Key> keys = ...; > > List<Object> ids = new ArrayList<Object>(); > > for (Key key : keys) { > > ids.add(pm.newObjectIdInstance(Master.class, key));} > > > List<Master> list = (List<Master>) pm.getObjectsById(ids); > > > Thanks, > > > Yasuo Higa --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to google-appengine-java@googlegroups.com To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en -~----------~----~----~----~------~----~------~--~---