我正在使用grails-2.5.6版本。我正在使用spring-security-core插件。我在UserRole表上有一个条件查询。我想按角色查找所有不同的用户。它工作正常。但是问题是分页效果。当我指望列表时,它指望的是UserRole列表对象。但是我需要依靠不同的投影项目。有人可以帮我吗?以下是我的尝试:

def list(Integer max) {
    def userInstanceList = UserRole.createCriteria().list(params) {
        createAlias('user', 'au')
        createAlias('role', 'ar')
        projections {
            distinct("user")
        }
        if (params.roleId) {
            eq('ar.id', params.getLong("roleId"))
        }
    }
    def totalCount = userInstanceList.totalCount
    [userInstanceList: userInstanceList, totalCount: totalCount]
}

在这里,totalCount是UserRole列表的数量。但是我想要独特的投影数。

最佳答案

我想稍微不同地解决这个问题,您想分析用户,而不是用户角色。

所以我会做类似的事情:

List<User> usersWithRole = UserRole.createCriteria().list(params) {
      role {
        eq('id', params.getLong("roleId"))
      }
    }*.user

    int count = usersWithRole.size()

除非当然有成百上千的用户,在这种情况下,我不想每次都加载所有用户,而是恢复为SQL。

这是您正在使用的Spring Security的自定义版本吗?我从未见过具有基于'long'的ID的Roles,通常,键是代表授权机构名称的字符串。

10-04 19:08