Grails以多列命名查询排序顺序

时间:2015-04-15 09:29:13

标签: grails

给出一个namedQuery:

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

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

1 个答案:

答案 0 :(得分:0)

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

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