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 中使用条件对多个字段进行排序

Grails 映射对多个字段进行排序 :: Groovy 对多个映射条目进行排序

Grails App中的双重分页问题

使用 MongoDB 在 Grails 中命名查询的列表方法中排序不区分大小写

grails域类中的时间字段

如何在 grails 上按枚举排序?