Определение порядка сортировки по умолчанию в Grails / GORM - PullRequest
16 голосов
/ 06 февраля 2009

Допустим, я определил объект User с помощью GORM. Каждый пользователь может иметь ноль или более Логин: s. Каждый логин имеет метку времени. При получении user.logins я хочу, чтобы логины сортировались по значению login.date. Как правильно Grails способ достичь этого?

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

<g:each var="login" in="${user.logins}">
  <tr>
    <td>${login.date}</td>
  </tr>
</g:each>

Это ссылочные классы:

class User {
  ...
  def hasMany = [logins: Login]
  static fetchMode = [logins: "eager"]
}

class Login {
  Date date
  ...
  def belongsTo = [User]
}

Я использую Grails 1.0.4, последний стабильный выпуск.

Ответы [ 3 ]

28 голосов
/ 28 мая 2009

Они показывают, как это сделать, на странице GORM в справочном руководстве (раздел 5). Бит, который вы хотите, находится в нижней части этого документа, это раздел, который вы хотите. У них есть два простых примера:

class Airport {
    …
    static mapping = {
        sort "name"
    }
}

class Airport {
    …
    static mapping = {
        sort name:"desc"
    }
}

У них также есть пример сортировки по ассоциации:

class Airport {
    …
    static hasMany = [flights:Flight]
    static mapping = {
        flights sort:'number'
    }
}
14 голосов
/ 06 февраля 2009

Просто заставьте Класс входа в систему реализовать интерфейс Comparable:

class Login implements Comparable {

    // ...

    Date date

    public int compareTo(def other) {
        return date <=> other?.date // <=> is the compareTo operator in groovy
    }

}

и объявить отношение как SortedSet:

class User {
  ...
  def hasMany = [logins: Login]               
  SortedSet logins

  static fetchMode = [logins: "eager"]
}
8 голосов
/ 10 марта 2009

Обработка порядка сортировки по умолчанию в Grails / GORM, по-видимому, радикально упрощена в Grails 1.1:

...