grails - Grails:对关系中的集合进行分页和排序

我想对关系中的集合进行分页和排序

例如,使用以下模型:

class User {
   String userName, password
   static hasMany = [roles: UserRole, preferences: Preference]
}

class UserRole {
   String name, description

   static hasMany = [actions: Action]
}

我想恢复特定用户的所有角色。我已经加载了用户,所以正常的方式是使用
user.roles

但我想按UserRole属性对其进行排序,并希望对其进行动态分页

我知道,如果我想对所有UserRole进行排序和分页,可以使用:
UserRole.list([sort: 'name', order: 'asc',max: 5,offset:0])

但是我只想为与用户关联的角色执行此操作。我试图使用条件,但我想我缺少了一些东西。

我也在这里看了一下:
http://grails.1312388.n4.nabble.com/A-Relationship-Paging-Pattern-td1326643.html

但是然后我将不得不将该关系重新添加到UserRole中,所以我将拥有:
static hasMany = [users : UserRole]

我怎样才能做到这一点?最好的方法是什么?

请让我知道是否需要更多信息,如果我不清楚的话请抱歉

感谢致敬

最佳答案

您无法分页“普通”关系。

您可以使用mapping DSL更改子对象出现的顺序:

static mapping = {
    sort name:desc
}

为了简化手工制作的分页关系,可以使用命名查询:
class Role {
    static namedQueries = {
        userRoles {
            eq('user', UserSessionService.instance.currentUser)
        }
    }
}

或者,您可以实现一个瞬时User的属性,该属性将为CriteriaUser(可以分页)返回Role

https://stackoverflow.com/questions/6810201/

相关文章:

php - 通过ssh2 sftp包装程序进行fopen会导致Chrome ERR_EMPTY_RE

grails - 为grails支架禁用sitemesh吗?

windows - 从Windows终端远程运行Unix脚本并传回提示

grails - 如何使Grails条件作为左联接执行?

security - Grails 中的真实性 token

grails - 嵌套Jasper表达式

sockets - 通过Network.Browser进行Socks5连接

grails - Grails命令对象和输入名称值

grails - 在Grails中为ShiroUser指定软件包

ssh - GitLab ssh 到本地用户的主机名导致 "fatal: Could not rea