Fixed in trunk. On Fri, Jan 8, 2010 at 10:31 AM, Max Ross (Google) < [email protected] <maxr%[email protected]>> wrote:
> Issued filed: > http://code.google.com/p/datanucleus-appengine/issues/detail?id=185 > > > On Fri, Jan 8, 2010 at 10:12 AM, Max Ross (Google) < > [email protected] <maxr%[email protected]>> wrote: > >> 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.
