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.

Foi útil?

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:

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"]
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top