Как заказать несколько полей в Grails?

Есть ли способ получить список, упорядоченный двумя полями, например, последнее и первое имя?

Я знаю, что .listOrderByLastAndFirst и .list(sort:'last, first') не будут работать.

Ответ 1

Это старое решение больше не работает. Пожалуйста, см. Матовый ответ ниже

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

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

или

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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.first

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

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

Некоторые примеры компараторов Groovy показаны здесь

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