17 Stimmen

Standard-Sortierreihenfolge in Grails/GORM festlegen

Angenommen, ich habe mit GORM ein User-Objekt definiert. Jeder Benutzer kann null oder mehr Login:s haben. Jedes Login hat einen Zeitstempel. Wenn ich user.logins abrufe, möchte ich, dass die Logins nach dem Wert von login.date sortiert werden. Was ist die richtige Grails Weg, dies zu erreichen?

Beispiel: Ich möchte, dass der folgende Code alle Anmeldungen der Benutzer in aufsteigender Reihenfolge auflistet.

<g:each var="login" in="${user.logins}">
  <tr>
    <td>${login.date}</td>
  </tr>
</g:each>

Dies sind die referenzierten Klassen:

class User {
  ...
  def hasMany = [logins: Login]
  static fetchMode = [logins: "eager"]
}

class Login {
  Date date
  ...
  def belongsTo = [User]
}

Ich bin mit Grails 1.0.4, die die neueste stabile Version ist.

30voto

Wie das geht, wird auf der GORM-Seite im Referenzhandbuch (Abschnitt 5) gezeigt. Der Abschnitt, der Sie interessiert, befindet sich am Ende des Dokuments. Es gibt zwei einfache Beispiele:

class Airport {
    …
    static mapping = {
        sort "name"
    }
}

class Airport {
    …
    static mapping = {
        sort name:"desc"
    }
}

Sie haben auch ein Beispiel für die Sortierung nach einer Assoziation:

class Airport {
    …
    static hasMany = [flights:Flight]
    static mapping = {
        flights sort:'number'
    }
}

14voto

Machen Sie einfach die Login-Klasse implementieren die Schnittstelle Comparable:

class Login implements Comparable {

    // ...

    Date date

    public int compareTo(def other) {
        return date <=> other?.date // <=> is the compareTo operator in groovy
    }

}

und deklarieren die Beziehung als SortedSet:

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

  static fetchMode = [logins: "eager"]
}

8voto

knorv Punkte 47079

Die Handhabung der Standard-Sortierreihenfolge in Grails/GORM scheint in Grails 1.1 radikal vereinfacht worden zu sein:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X