我正在使用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,通常,键是代表授权机构名称的字符串。