Definindo padrão tipo de ordem no Grails / GORM
Pergunta
Vamos dizer que eu tenho definied um objeto Usuário usando GORM. Cada usuário pode ter zero ou mais Acesso: s. Cada Entrada tem um timestamp. Ao recuperar user.logins Quero que os logins de ser resolvida com base no valor de login.date. O que é a maneira correta Grails para conseguir isso?
Exemplo: Eu quero o seguinte código à lista de todos os logins do usuário em ordem crescente
.<g:each var="login" in="${user.logins}">
<tr>
<td>${login.date}</td>
</tr>
</g:each>
Estas são as classes referenciadas:
class User {
...
def hasMany = [logins: Login]
static fetchMode = [logins: "eager"]
}
class Login {
Date date
...
def belongsTo = [User]
}
Estou correndo Grails 1.0.4 que é a última versão estável.
Solução 3
A manipulação da ordem de classificação padrão no Grails / GORM parece ter sido radicalmente simplificado em Grails 1.1:
- Grails 1.1 notas de lançamento (procure por "padrão Sort Order")
Outras dicas
Eles mostram como fazer isso na página GORM no guia de referência (seção 5). O pouco que você quer é perto do fundo do referido documento é a seção que você deseja. Eles têm dois exemplos simples:
class Airport {
…
static mapping = {
sort "name"
}
}
class Airport {
…
static mapping = {
sort name:"desc"
}
}
Eles também têm um exemplo de triagem em uma associação:
class Airport {
…
static hasMany = [flights:Flight]
static mapping = {
flights sort:'number'
}
}
Basta fazer a classe de login implementar a interface Comparable:
class Login implements Comparable {
// ...
Date date
public int compareTo(def other) {
return date <=> other?.date // <=> is the compareTo operator in groovy
}
}
e declarar a relação a ser um SortedSet:
class User {
...
def hasMany = [logins: Login]
SortedSet logins
static fetchMode = [logins: "eager"]
}