题
假设我使用 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,这是最新的稳定版本。
解决方案 3
Grails/GORM 中默认排序顺序的处理似乎在 Grails 1.1 中得到了极大的简化:
- Grails 1.1 发行说明 (搜索“默认排序顺序”)
其他提示
它们显示了如何将参考指南(第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'
}
}
只需使登录类实现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"]
}
不隶属于 StackOverflow