获取最新10个注册用户-Spring security Grails

获取最新10个注册用户-Spring security Grails,grails,spring-security,gorm,grails-plugin,grails-2.0,Grails,Spring Security,Gorm,Grails Plugin,Grails 2.0,我需要得到我的统计应用程序中最后10个注册用户(普通用户)。应用程序有两个角色:普通用户和管理员用户 在我的用户类(Spring security)中,我有dateCreated字段,我可以通过此查询获得控制器中最后10个注册用户: User.listOrderByDateCreated(max: 10, order: 'desc') 但我只想在普通用户之间获得它,不包括管理员。通过此查询,我可以获得所有普通用户: UserRole.findAllByRole(role).user 我必须运

我需要得到我的统计应用程序中最后10个注册用户(普通用户)。应用程序有两个角色:普通用户和管理员用户

在我的用户类(Spring security)中,我有dateCreated字段,我可以通过此查询获得控制器中最后10个注册用户:

User.listOrderByDateCreated(max: 10, order: 'desc')
但我只想在普通用户之间获得它,不包括管理员。通过此查询,我可以获得所有普通用户:

UserRole.findAllByRole(role).user
我必须运行什么查询?谢谢。

试试这个:

User.findAllByRole(role,
                 [max: 10, sort: "dateCreated", order: "desc"])
试试这个:

User.findAllByRole(role,
                 [max: 10, sort: "dateCreated", order: "desc"])

令人惊讶的是,这是一个棘手的问题,因为用户对角色没有直接的控制权,所以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进行查询:


令人惊讶的是,这是一个棘手的问题,因为用户对角色没有直接的控制权,所以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进行查询:

试试这个

> 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])
让我知道它是否适合您……)

试试这个

> 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])

让我知道它是否适合您……)

此查询不起作用,因为角色不是用户字段。通过第一个查询,我可以获得所有普通用户(不包括管理员)。但未筛选此列表(max:10和sort:dateCreated)。此查询不起作用,因为角色不是用户字段。通过第一个查询,我可以获得所有普通用户(不包括管理员)。但是这个列表没有被过滤(max:10和sort:dateCreated)。是的,谢谢。它起作用了!!虽然这些标准对我不起作用。第一个用户和订单符号无法识别。请确保范围中没有超出您的条件的
user
变量(即,任何带有
def user=…
的变量)。昨天晚上我的头撞到了那个现在,它起作用了。问题出在“情商”角色上,角色上。现在,(标准和HQL)都可以工作了。在性能、安全性等方面,什么是最好的方法?HQL可能是性能最好的,其次是标准。Groovy列表版本最慢,因为调用
User.list()
从数据库检索所有用户,这对10个用户来说是一种浪费此外,如果这个答案帮助你,请考虑接受它,所以问题显示为“回答”。是的,谢谢。它起作用了!!虽然这些标准对我不起作用。第一个用户和订单符号无法识别。请确保范围中没有超出您的条件的
user
变量(即,任何带有
def user=…
的变量)。昨天晚上我的头撞到了那个现在,它起作用了。问题出在“情商”角色上,角色上。现在,(标准和HQL)都可以工作了。在性能、安全性等方面,什么是最好的方法?HQL可能是性能最好的,其次是标准。Groovy列表版本最慢,因为调用
User.list()
从数据库检索所有用户,这对10个用户来说是一种浪费此外,如果这个答案帮助你,请考虑接受它,所以问题显示为“回答”。