usar - Definición del orden de clasificación predeterminado en Grails/GORM
servicios en grails (3)
Digamos que he definido un objeto User usando GORM. Cada usuario puede tener cero o más Login: s. Cada inicio de sesión tiene una marca de tiempo. Al recuperar user.logins, quiero que los inicios de sesión se ordenen según el valor de login.date. ¿Cuál es la forma correcta de Grails para lograr esto?
Ejemplo: Deseo que el siguiente código liste todos los inicios de sesión del usuario en orden ascendente.
<g:each var="login" in="${user.logins}">
<tr>
<td>${login.date}</td>
</tr>
</g:each>
Estas son las clases referenciadas:
class User {
...
def hasMany = [logins: Login]
static fetchMode = [logins: "eager"]
}
class Login {
Date date
...
def belongsTo = [User]
}
Estoy ejecutando Grails 1.0.4 que es la última versión estable.
El manejo del orden de clasificación predeterminado en Grails / GORM parece haber sido radicalmente simplificado en Grails 1.1:
- Notas de la versión de Grails 1.1 (busque "Orden de clasificación predeterminado")
Muestran cómo hacer esto en la página GORM en la guía de referencia (sección 5). El bit que desea está cerca de la parte inferior de ese documento es la sección que desea. Tienen dos ejemplos simples:
class Airport {
…
static mapping = {
sort "name"
}
}
class Airport {
…
static mapping = {
sort name:"desc"
}
}
También tienen un ejemplo de clasificación en una asociación:
class Airport {
…
static hasMany = [flights:Flight]
static mapping = {
flights sort:''number''
}
}
Simplemente haga que la clase de inicio de sesión implemente la interfaz Comparable:
class Login implements Comparable {
// ...
Date date
public int compareTo(def other) {
return date <=> other?.date // <=> is the compareTo operator in groovy
}
}
y declara que la relación es un SortedSet:
class User {
...
def hasMany = [logins: Login]
SortedSet logins
static fetchMode = [logins: "eager"]
}