persistence@glassfish.java.net

Re: Unexpected token: ORDER

From: MariusW <java_at_bluebricks.no>
Date: Wed, 9 Apr 2008 02:36:28 -0700 (PDT)

I need it because I use setMaxResults to get only a subset of the records.
And this subset must always be ordered by priority so that the messages with
the highest priority is selected first. In this way, if there are 1000
messages currently queued, and setMaxResults is 100, I must be sure that the
most important messages are picked up first, no matter how long low-priority
messages have been in the queue.

If you have ideas on other ways to solve this, they are most welcome!

//Marius


Dies wrote:
>
> JPQL does not allow the use of ORDER BY in a subquery:
>
> subquery_from_clause ::=
> FROM subselect_identification_variable_declaration
> {, subselect_identification_variable_declaration}*
>
> Why do you need it?
>
>
>
> MariusW wrote:
>> Internal Exception: line 1:273: unexpected token: ORDER
>>
>> In a more readable format, the EJB QL looks like this:
>> UPDATE MobileMessage x
>> SET x.statusmsg = 'PROCESSING',x.transporttime = :transporttime
>> WHERE x.id IN (
>> SELECT y.id FROM MobileMessage y
>> WHERE y.gateway = :gateway
>> AND y.statusmsg IN ( 'PENDING','RETRY','SCHEDULED')
>> AND ((y.timetosend IS NULL) OR (y.timetosend < :cutoff ))
>> ORDER BY y.priority
>> )
>>
>> If I translate it to standard SQL and execute it, it works fine:
>> UPDATE bb_core.bb_message
>> SET statusmsg = 'PROCESSING'
>> WHERE id IN (
>> SELECT id FROM bb_core.bb_message
>> WHERE gateway = 1
>> AND statusmsg IN ( 'PENDING','RETRY','SCHEDULED')
>> AND ((timetosend IS NULL) OR (timetosend < now() ))
>> ORDER BY priority
>> )
>>
>> Any tips would be greatly appreciated!
>>
>> // Marius
>>
>
>

-- 
View this message in context: http://www.nabble.com/Unexpected-token%3A-ORDER-tp16582059p16583062.html
Sent from the java.net - glassfish persistence mailing list archive at Nabble.com.