2008-11-28 7 views

ответ

7

Это старое решение больше не работает. См. Ответ матрая ниже

Возможно, вам придется написать пользовательский поиск в HQL или использовать построитель критериев.

MyDomain.find("from Domain as d order by last,first desc") 

Или

def c = MyDomain.createCriteria() 
def results = c.list { 
     order("last,first", "desc") 
} 
+3

Это решение не работает – Randyaa 2011-09-01 13:31:40

+3

Я попробовал это, и решение не работает. – mattlary 2012-03-27 18:36:01

+0

Не знаете, почему это было отмечено отрицательным, но первый подход Mydomain.find определенно работает. вероятно, у него есть опечатка в вышеупомянутом, но это не причина для минуса. +1 от меня. – saurabh 2012-12-17 12:39:34

0

Если вы занимались сортировкой по содержимому своих элементов, вам нужно было бы реализовать компаратор, который имел бы некоторые умения, позволяющие вам определять порядок сортировки на основе нескольких свойств.

Некоторые примеры компараторов Groovy стиля показаны here

Однако если список вы сортировка возвращается из запроса к базе данных, вы бы лучше его сортировку с использованием CrteriaQuery и родов на этом

3

Я думаю, что критерием является лучшим выбором, но вы правильно сделали, пытаясь Нашедший первым. При извлечении объектов домена из GORM правильным порядком для попытки является: динамический поиск, критерии, HQL.

80

Hates_ Ответ на критерии, похоже, не работает для меня; положив "last,first" на заказ, вызывают только исключения, "Property 'last,first' not found". Чтобы заказать на двух полях, вы можете сделать следующее:

def c = MyDomain.createCriteria() 
def results = c.list { 
    and{ 
     order('last','desc') 
     order('first','desc') 
    } 
} 
4

Этот запрос работает на основе первого поля. Когда первое поле пустое, оно замыкается вторым полем.

order('last','desc') 
order('first','desc') 
9

Это довольно старый, но помог мне найти подходящее решение. А "уборщик" пример кода с помощью withCriteria ярлыка:

def c = MyDomain.withCriteria { 
    and { 
     order('last', 'desc') 
     order('first', 'desc') 
    } 
} 
5

Более сложные критерии заказа, (протестировано в Grails 2.1.0)

def c = MyDomain.withCriteria { 
    property { 
     order('last', 'desc') 
    } 
    order('first', 'desc') 
} 

сорта сначала MyDomain.property.last затем MYDOMAIN. первый

3

вы можете сделать это

def results=MyDomain.findAll([sort:"last",order:'desc'],[sort:"first",order:'desc']); 

эта строка кода будет первым сортировать результаты из класса домена «MyDomain» сначала по фамилии, а затем по имени человека.

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

  • Нет связанных вопросов^_^