2013-05-02 5 views
3

У меня есть такой класс домена в моем проекте:Grails - Сортировка по двум полям в запросе

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' в этой таблице.

Каков правильный синтаксис?

Спасибо.

+0

Возможный дубликат [Как сделать заказ более чем одним полем в Grails?] (Http://stackoverflow.com/questions/326053/how-to-order-by-more-than-one-field-in- grails) –

ответ

10

Используя динамические искатели, вы можете сортировать по одному свойству.

Если вы хотите отсортировать по нескольким свойствам, вы можете использовать критерии или запрос HQL.

Ниже приведен пример с использованием критериев:

def logs = Log.createCriteria().list { 
    eq('tableId', tableID) 
    order('entityId', 'desc') 
    order('logDt', 'desc') 
} 
+0

У меня есть ответ от вопроса, потому что у меня есть один параметр –

2

Попробуйте это,

Log.findAllByTableId(tableID, [sort: ['entityId': 'desc', 'logDt': 'desc']]) 

Он работает с Grails 3.1.9 и далее.

NB: Возможно, работает и с некоторыми предыдущими версиями, но никогда не пробовал.

Смежные вопросы