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.

Reply via email to