Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Grails - Sort by two fields in a query

I Have Such a domain class in my project:

class Log  {

Integer entityId
Integer tableId
Date logDt
}

I would like to select all the records by a certain tableId, and sort them by entityId and logDt desc. Sorting by one filed works fine:

Log.findAllByTableId(tableID, [sort: 'entityId', order: 'desc'])

but when I try to sort by both fields:

Log.findAllByTableId(tableID, [sort: 'entityId,logDt', order: 'desc'])

I get an error that there is no such field 'entityId,logDt' at this table.

What is the right syntax to do so?

Thanks.

like image 903
Dvora Avatar asked Dec 08 '22 15:12

Dvora


2 Answers

Using the dynamic finders, you just can sort by one property.

If you would like to sort by multiple properties you could use a criteria or a HQL query.

Here is an example using a criteria:

def logs = Log.createCriteria().list {
    eq('tableId', tableID)
    order('entityId', 'desc')
    order('logDt', 'desc')
}
like image 125
aiolos Avatar answered Dec 29 '22 12:12

aiolos


Try this,

Log.findAllByTableId(tableID, [sort: ['entityId': 'desc', 'logDt': 'desc']])

It works, with Grails 3.1.9 onwards.

NB: Probably, works with some previous versions too, never tried though.

like image 21
Adeel Ansari Avatar answered Dec 29 '22 12:12

Adeel Ansari