2015-04-15 5 views
0

Учитывая namedQuery: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") 

Как Я заказываю результаты несколькими столбцами? Я хотел бы динамически определять параметры сортировки, а не определять их в запросе.

+0

Я вижу здесь [здесь] (http://grails.github.io/grails-doc/3.0.x/ref/Domain%20Classes/namedQueries.html), который назвал запросы поддерживает синтаксис критериев строитель. Посмотрите на [этот вопрос] (http://stackoverflow.com/questions/326053/how-to-order-by-more-than-one-field-in-grails) и [этот вопрос] (http:// /stackoverflow.com/questions/16332369/grails-sort-by-two-fields-in-a-query). –

+0

@DaddyPumpkin Кажется, что они включают параметры сортировки в именованный запрос. Я хочу, чтобы сортировка была независимой от именованного запроса. – John

+0

[This] (http://stackoverflow.com/questions/4882992/grails-mapping-sort-on-multiple-fields-groovy-sort-on-multiple-map-entries) - это то, что вам нужно. –

ответ

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) 
Смежные вопросы