Grails - Sort by two fields in a query

2019-04-11 07:33发布

问题:

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.

回答1:

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')
}


回答2:

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.



标签: grails gorm