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