I'm really sorry but I've been unable to construct an equivalent query that avoids this bug. If the size of keyList isn't too large I'd recommend executing a batch get to retrieve all those objects by id and then applying the rest of your filter in-memory.
Sorry for the trouble. Max On Fri, Jan 8, 2010 at 9:48 AM, Max Ross (Google) <[email protected]<maxr%[email protected]> > wrote: > Thanks for the report, looks like a bug. Multiple contains() clauses are > fine but I didn't properly account for the case where one of the clauses is > on the primary key of the object. The fix should be straightforward but let > me see if I can get you a workaround. > > Max > > On Thu, Jan 7, 2010 at 7:06 PM, siliconeagle <[email protected]> wrote: > >> Basically i have 3 fields in the same table to select by >> using .contains() clauses - one is the primary key field >> >> so :keyList (java.util.Set<Key>) , :feedTypes (java.util.Set<Integer>) >> & :contentTypes(java.util.Set<Integer>) with values i need to select >> with. >> >> The Feed object (and the relevant fields) is >> @PersistenceCapable(identityType = IdentityType.APPLICATION) >> public class Feed { >> >> @PrimaryKey >> @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) >> private Key id; >> ... >> @Persistent >> private int typeFeed ; >> @Persistent >> private int typeContent = CONTENT_TYPE_NOTCHECKED; >> .... >> } >> >> so i try this >> Query query1 = pm.newQuery(Feed.class); >> query1.setFilter(":keyList.contains(id) && :feedTypes.contains >> (typeFeed) && :contentTypes.contains(typeContent)"); >> query1.setRange(0,500); >> Map<String, Collection> paramsf = new HashMap<String, Collection>(); >> paramsf.put("keyList", feedIds); >> paramsf.put("feedTypes", feedTypes); >> paramsf.put("contentTypes", contentTypes); >> feeds = (List<Feed>) query1.executeWithMap(paramsf); >> >> and i get >> javax.jdo.JDOFatalUserException: Batch lookup by primary key is only >> supported if no other filters and no sort orders are defined. >> >> Is there any way around it - from other posts it looks like subqueries >> an the IN syntax arent supported. >> >> >> >> >> -- >> 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 >> [email protected]. >> To unsubscribe from this group, send email to >> [email protected]<google-appengine-java%[email protected]> >> . >> For more options, visit this group at >> http://groups.google.com/group/google-appengine-java?hl=en. >> >> >> >> >--
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 [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-java?hl=en.
