【问题标题】:Defining default sort-order in Grails/GORM在 Grails/GORM 中定义默认排序顺序
【发布时间】:2010-10-05 22:22:42
【问题描述】:

假设我使用 GORM 定义了一个用户对象。每个用户可以有零个或多个 Login:s。每个登录都有一个时间戳。检索 user.logins 时,我希望根据 login.date 的值对登录进行排序。实现此目的的正确 Grails 方法是什么?

示例:我希望下面的代码按升序列出所有用户的登录信息。

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

这些是引用的类:

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

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

我正在运行 Grails 1.0.4,这是最新的稳定版本。

【问题讨论】:

    标签: grails grails-orm gsp


    【解决方案1】:

    他们在参考指南的 GORM 页面上展示了如何执行此操作(第 5 节)。您想要的位在该文档的底部附近是您想要的部分。他们有两个简单的例子:

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

    他们还有一个对关联进行排序的示例:

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

    【讨论】:

    • 如果你想下降关联:flights sort:'number', order: 'desc'(每grails.1312388.n4.nabble.com/…
    • 如何对多个属性进行排序?
    • @ricardogobbo 可能有点晚了,但请继续:static mapping = { sort([column1: 'asc', column2: 'asc']) }
    【解决方案2】:

    只需让登录类实现 Comparable 接口即可:

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

    并将关系声明为 SortedSet:

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

    【讨论】:

      【解决方案3】:

      Grails/GORM 中默认排序顺序的处理似乎在 Grails 1.1 中得到了彻底的简化:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-13
        • 1970-01-01
        • 1970-01-01
        • 2011-06-27
        • 1970-01-01
        • 2011-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多