#grails #groovy #grails-orm
#grails #groovy #grails-orm
Вопрос:
Возможно ли в grails сортировать результаты запроса по свойству родительского класса в отношениях. Например. у меня есть класс пользовательского домена, который имеет отношение «один ко многим» со списком задач.
При отображении страницы списка класса домена Tasks я хочу иметь возможность сортировать список задач по соответствующему имени пользователя.
class User {
String name
String login
String group
List tasks = new ArrayList()
static hasMany = [tasks:Task]
}
class Task {
String summary
String details
User user
static belongsTo = [user:User]
}
Я могу сделать что-то вроде этого
Task.list([sort:"user", order:"asc"])
Но это сортирует по user.id есть ли способ указать сортировку, которая должна быть на user.name ?
Ответ №1:
Вы можете сделать это, используя критерии
def criteria = Task.createCriteria()
def taskList = criteria.list {
createAlias("user","_user")
order( "_user.name")
}
Комментарии:
1. Круто, работает как шарм. Есть какие-нибудь идеи, как я могу сделать сортировку нечувствительной к регистру?
2. Неважно, нашел это в документах hibernate, по-видимому, я просто добавляю .IgnoreCase() в порядок, подобный этому order(«_user.name «).IgnoreCase()
3. однако это не работает с точки зрения установки порядка сортировки по умолчанию для объекта, что, по-видимому, является большой занозой в заднице.
4. Какова была цель создания псевдонима?
Ответ №2:
iirc, grails сортирует с помощью toString(), и поскольку вы его не указали, он использует идентификатор.