Fixed in trunk.

On Fri, Jan 8, 2010 at 10:31 AM, Max Ross (Google) <
maxr+appeng...@google.com <maxr%2bappeng...@google.com>> 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) <
> maxr+appeng...@google.com <maxr%2bappeng...@google.com>> 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) <
>> maxr+appeng...@google.com <maxr%2bappeng...@google.com>> 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 <rrmu...@gmail.com> 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
>>>> google-appengine-j...@googlegroups.com.
>>>> To unsubscribe from this group, send email to
>>>> google-appengine-java+unsubscr...@googlegroups.com<google-appengine-java%2bunsubscr...@googlegroups.com>
>>>> .
>>>> 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 google-appengine-j...@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.

Reply via email to