cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Gentry <mgen...@masslight.net>
Subject Re: Order By Expression
Date Tue, 16 Mar 2010 17:53:33 GMT
Hi Dave,

You are close, but not quite there.  The ordering only applies to a
column (artistName), but you are giving it a qualifier/expression
(artistName = 'Tom').  You need to create the expression separately
(multiple ways to do that, but I'll show one):

Expression expression = ExpressionFactory.match("artistName", "Tom");
SelectQuery query = new SelectQuery(Artist.class, expression);
query.addOrdering("artistName", SortOrder.DESCENDING);
context.performQuery(query);

You might want to look at:

http://cayenne.apache.org/doc30/parameterized-queries.html
http://cayenne.apache.org/doc30/api/org/apache/cayenne/exp/ExpressionFactory.html
http://cayenne.apache.org/doc30/api/org/apache/cayenne/exp/Expression.html

Expressions are where you do the WHERE clause.  Also, instead of
hardcode "artistName", you probably have Artist.ARTIST_NAME_PROPERTY
available as a constant which is safer to use.

mrg


On Tue, Mar 16, 2010 at 1:33 PM, Dave Dombrosky <dombrd@gmail.com> wrote:
> Yes I'm using Cayenne 3.  I'm not sure if I stated the problem in
> enough detail, because it seems like you guys are confused.  Or maybe
> I just don't understand how to use what you are telling me about.
>
> Maybe it would be better if I was helped with a full example.  Using
> the Artist class from Cayenne's test schema, how would I go about
> creating a SelectQuery to order all artists with the name "Tom" first?
>  Basically to generate a query similar to this:
>
> SELECT * FROM artist ORDER BY artist_name = 'Tom' DESC;
>
> Would it be like this?
>
> SelectQuery query = new SelectQuery(Artist.class);
> query.addOrdering("artistName = 'Tom'", SortOrder.DESCENDING);
> context.performQuery(query);
>
> Because that still gets the error Unsupported ordering expression:
> artistName = 'Tom'.
>
> Am I doing something wrong, or is this impossible with a SelectQuery?
> I'd rather not use SQLTemplate if I can avoid it.
>
> -Dave
>
> On Tue, Mar 16, 2010 at 8:39 AM, Michael Gentry <mgentry@masslight.net> wrote:
>> Hi Dave,
>>
>> Since you are seeing deprecation warnings I'm assuming you are using
>> Cayenne 3?  If so, you should use:
>>
>> addOrdering(Ordering ordering) or
>> addOrdering(String sortPathSpec, SortOrder order)
>>
>> These are defined for your SelectQuery object.  Of course, if you are
>> using the first of those methods, you'll have to create your own
>> Ordering object first.  The second creates one for you behind the
>> scenes.
>>
>> Let me know if you need additional pointers!
>>
>> mrg
>>
>>
>> On Tue, Mar 16, 2010 at 1:11 AM, Dave Dombrosky <dombrd@gmail.com> wrote:
>>> Is there any way to use sort expressions in a query?  Something like
>>> "ORDER BY column = id"?  I get the error "Unsupported ordering
>>> expression" when trying to execute a query with this in it.
>>>
>>> Also, it looks like I might be able to do this using in-memory
>>> sorting, but the Ordering(Expression sortExpression, ...) methods are
>>> deprecated.  So what's the preferred way to sort on expressions in
>>> Cayenne?
>>>
>>> -Dave
>>>
>>
>

Mime
View raw message