Grails - 按查询中的两个字段排序
Posted
技术标签:
【中文标题】Grails - 按查询中的两个字段排序【英文标题】:Grails - Sort by two fields in a query 【发布时间】:2013-04-26 06:58:10 【问题描述】:我的项目中有这样一个领域类:
class Log
Integer entityId
Integer tableId
Date logDt
我想通过某个tableId选择所有记录,并按照entityId 和 logDt desc排序。 按一个字段排序可以正常工作:
Log.findAllByTableId(tableID, [sort: 'entityId', order: 'desc'])
但是当我尝试按两个字段排序时:
Log.findAllByTableId(tableID, [sort: 'entityId,logDt', order: 'desc'])
我收到一条错误消息,指出此表中没有 'entityId,logDt'
这样的字段。
这样做的正确语法是什么?
谢谢。
【问题讨论】:
How to order by more than one field in Grails? 的可能重复项 【参考方案1】:使用动态查找器,您只需按一个属性排序。
如果您想按多个属性排序,可以使用条件或 HQL 查询。
这是一个使用条件的示例:
def logs = Log.createCriteria().list
eq('tableId', tableID)
order('entityId', 'desc')
order('logDt', 'desc')
【讨论】:
我从问题中得到了答案,因为我有一个参数【参考方案2】:试试这个,
Log.findAllByTableId(tableID, [sort: ['entityId': 'desc', 'logDt': 'desc']])
它适用于 Grails 3.1.9 及更高版本。
注意:可能也适用于一些以前的版本,但从未尝试过。
【讨论】:
以上是关于Grails - 按查询中的两个字段排序的主要内容,如果未能解决你的问题,请参考以下文章
Grails 映射对多个字段进行排序 :: Groovy 对多个映射条目进行排序