Сортировка результатов запроса по родительскому свойству в grails

#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(), и поскольку вы его не указали, он использует идентификатор.