我需要得到最后10个注册用户(正常用户)在我的统计申请。应用程序有两个角色:普通用户和管理员用户。
在我的用户类( security)中,我有dateCreated字段,我可以使用以下查询在控制器中获得最后10个注册用户:
User.listOrderByDateCreated(max: 10, order: 'desc')
但我只想在普通用户之间获取,不包括管理员。通过这个查询,我可以获得所有普通用户:
UserRole.findAllByRole(role).user
我要运行什么查询?谢谢。
发布于 2016-04-03 21:49:56
令人惊讶的是,这是一个棘手的问题,因为用户没有对角色的直接处理,所以GORM帮助者没有那么多帮助。使用直接的Groovy列表操作,我们可以得到您想要的东西。
def users = User.list().findAll { it.authorities.contains role }
.sort { it.dateCreated }
.reverse()
.take(10)
//or…
def users = UserRole.findAllByRole(role).user
.sort { it.dateCreated }
.reverse()
.take(10)
然而,如果您有大量的用户,这将是一个低效率的方法,以获得其中的10个。一个更好的选择可能是使用Hibernate标准:
def users = UserRole.createCriteria().list(max: 2) {
eq "role", role
user {
order 'dateCreated', 'desc'
}
projections { property 'user' }
}
如果需要,也可以通过executeQuery()
使用HQL进行查询。
def users = User.executeQuery("from User where id in (select user.id from UserRole where role.id = :roleId) order by dateCreated desc", [roleId: role.id], [max: 10])
发布于 2016-04-04 04:24:42
尝尝这个
> User.executeQuery( "from User user where user.id in (select userRole.user.id from UserRole userRole where userRole.role.id =:roleId) order by dateCreated desc", [roleId: role.id], [max: 10])
另一种方式是
UserRole.executeQuery( "select ur.user from UserRole ur where ur.role.id =:roleId) order by ur.user.dateCreated desc", [roleId: role.id], [max: 10])
让我知道它是否对你有用..。:)
发布于 2016-04-03 12:31:15
试试这个:
User.findAllByRole(role,
[max: 10, sort: "dateCreated", order: "desc"])
https://stackoverflow.com/questions/36383819
复制相似问题