在 Grails/GORM 中定义默认排序顺序

发布于 2024-07-12 13:40:38 字数 570 浏览 9 评论 0原文

假设我使用 GORM 定义了一个 User 对象。 每个用户可以有零个或多个 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,这是最新的稳定版本。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

清旖 2024-07-19 13:40:38

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

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

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

他们还有一个关联排序的例子:

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

They show how to do this on the GORM page in the reference guide (section 5). The bit you want is near the bottom of that document is the section you want. They have two simple examples:

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

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

They also have an example of sorting on an association:

class Airport {
    …
    static hasMany = [flights:Flight]
    static mapping = {
        flights sort:'number'
    }
}
橘味果▽酱 2024-07-19 13:40:38

只需让登录类实现 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"]
}

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"]
}
2024-07-19 13:40:38

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文