2009-02-06 10 views
16

Digamos que he definido un objeto User utilizando 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?Definir el orden de clasificación predeterminado en Grails/GORM

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 corriendo Grails 1.0.4 que es la última versión estable.

Respuesta

8

El manejo de un orden predeterminado en Grails/GORM parece tener sido radicalmente simplificado en Grails 1.1:

14

Simplemente hacer que la clase de sesión implementa 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 declarar la relación de ser un SortedSet:

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

    static fetchMode = [logins: "eager"] 
} 
27

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' 
    } 
} 
+2

Y si quieres descendente en la asociación: 'vuelos para ordenar: 'número', para: 'desc '' (por http://grails.1312388.n4.nabble.com/sort-by-association-descending-td1312425.html) –

+0

¿Cómo puedo ordenar múltiples atributos? – ricardogobbo

Cuestiones relacionadas