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

Getting the latest 10 registered users - Spring security Grails

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

在我的用户 class(Spring 安全)中,我有 dateCreated 字段,我可以在我的控制器中获取最后 10 个注册用户此查询:

User.listOrderByDateCreated(max: 10, order: 'desc')

但我只想在普通用户之间获取它,不包括管理员。通过这个查询,我可以获得所有普通用户:

UserRole.findAllByRole(role).user

我要 运行 什么查询?谢谢

试试这个:

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

令人惊讶的是,这是一个棘手的问题,因为 User 没有 Role 的直接句柄,所以 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])

试试这个

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

让我知道它是否适合你..:)