【问题标题】:Grails namedQuery sort order by multiple columnsGrails namedQuery 按多列排序
【发布时间】:2015-06-21 04:42:37
【问题描述】:

给定一个命名查询:

class MyDomainObject {

    String someProperty

    static namedQueries = {

        myNamedQuery {
            // some implementation here
        }

    }
}

我可以使用它生成一个列表,按单个键排序,如下所示 (documentation for 2.4.3 here):

def resultsList = MyDomainObject.myNamedQuery.list(sort: "someProperty", order: "desc")

如何按多列对结果进行排序?我希望能够动态定义排序参数,而不是在查询中定义它们。

【问题讨论】:

  • 我在这里看到here 命名查询支持标准构建器语法。看看this questionthis question
  • @DaddyPumpkin 似乎将排序参数合并到命名查询中。我想执行独立于命名查询的排序。
  • This 就是你所需要的。
  • 我可以看到您在那里尝试做什么,但这与我需要的不同。查询在(远程)数据库中执行,而 list.sort() 在 Grails 服务器上执行。他们不是同一台机器。我想我已经有了一个我正在尝试开始工作的解决方案的基础——它涉及连接查询,然后调用 list()。

标签: grails


【解决方案1】:

我确信有更好的方法,但我最终创建了另一个命名查询,我可以将它连接到我选择的查询上(我也可以随时合并到原始查询中)。

// expects to be passed a List containing a series of Maps
orderByMultipleColumns { List columnsToSortBy ->
    columnsToSortBy.each { Map field ->
        order("${field.fieldName}", field.fieldOrder)
    }
}

// usage:
List orderByList = []
    // ...
    // within some loop that I use:
    orderByList << [fieldName: someValue, fieldOrder: dir] // dir == 'asc' or 'desc'
    // ...

MyDomainObject.myNamedQuery().orderByMultipleColumns(orderList).listDistinct(max: length, offset: start)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 2018-03-12
    相关资源
    最近更新 更多