Определение порядка сортировки по умолчанию в Grails/GORM
Вопрос
Допустим, я определил пользовательский объект с помощью GORM.У каждого пользователя может быть ноль или более логинов.Каждый вход в систему имеет временную метку.При получении 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
Обработка порядка сортировки по умолчанию в Grails / GORM, похоже, была радикально упрощена в Grails 1.1:
- Примечания к выпуску Grails 1.1 (найдите "Порядок сортировки по умолчанию")
Другие советы
Они показывают, как это сделать, на странице 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'
}
}
Просто сделайте так, чтобы класс Login реализовал Сопоставимый интерфейс:
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"]
}