Defining default sort-order in Grails/GORM

23,235

Solution 1

The handling of default sort order in Grails/GORM seems to have been radically simplified in Grails 1.1:

Solution 2

Just make the Login Class implement the Comparable interface:

class Login implements Comparable {

    // ...

    Date date

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

}

and declare the relation to be a SortedSet:

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

  static fetchMode = [logins: "eager"]
}
Share:
23,235
knorv
Author by

knorv

Updated on September 04, 2020

Comments

  • knorv
    knorv over 3 years

    Let's say I have definied a User object using GORM. Each user can have zero or more Login:s. Each Login has a timestamp. When retrieving user.logins I want the logins to be sorted based on the value of login.date. What is the correct Grails way to achieve this?

    Example: I want the following code to list all the user's logins in ascending order.

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

    These are the referenced classes:

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

    I'm running Grails 1.0.4 which is the latest stable release.