Grails namedQuery按多列排序顺序

Grails namedQuery按多列排序顺序,grails,Grails,给定namedQuery: class MyDomainObject { String someProperty static namedQueries = { myNamedQuery { // some implementation here } } } 我可以使用它生成一个列表,按单个键排序,如下所示: 如何按多列对结果排序?我希望能够动态定义排序参数,而不是在查询中定义它们。我确信有更好的方法,但我

给定namedQuery:

class MyDomainObject {

    String someProperty

    static namedQueries = {

        myNamedQuery {
            // some implementation here
        }

    }
}
我可以使用它生成一个列表,按单个键排序,如下所示:


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

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

// 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)

我在这里看到,命名查询支持criteria builder语法。请看一看,它们似乎将排序参数合并到了命名查询中。我希望执行排序以独立于命名查询。这就是你需要的。我知道你在那里想做什么,但这和我需要的不一样。查询在远程数据库中执行,而list.sort在Grails服务器上执行。它们不是同一台机器。我想我已经有了一个解决方案的基础,我正在努力工作——它包括连接查询,然后调用列表。
// 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)