我在我的安全框架中使用了 Nimble 和 Shiro,我刚刚遇到了一个 GORM 错误。确实 :
User.createCriteria().list {
maxResults 10
}
返回 10 个用户 而
User.list(max: 10)
返回 9 个用户 !经过进一步调查,我发现
createCriteria
返回了两倍相同的用户 (admin) 因为 admin 有 2 个角色 !!! (我不是在开玩笑)。似乎具有超过 1 个角色的任何用户将在
createCriteria
调用中返回两次,User.list
将返回 max-1
实例(即 9 个用户而不是 10 个用户)我可以使用什么解决方法来返回 10 个唯一用户?
这很烦人,因为我无法正确使用分页。
我的域类是:
class UserBase {
String username
static belongsTo = [Role, Group]
static hasMany = [roles: Role, groups: Group]
static fetchMode = [roles: 'eager', groups: 'eager']
static mapping = {
roles cache: true,
cascade: 'none',
cache usage: 'read-write', include: 'all'
}
}
class User extends UserBase {
static mapping = {cache: 'read-write'}
}
class Role {
static hasMany = [users: UserBase, groups: Group]
static belongsTo = [Group]
static mapping = { cache usage: 'read-write', include: 'all'
users cache: true
groups cache: true
}
}
最佳答案
不太简洁明了,但使用 HQL 查询似乎是解决此问题的一种方法。如 Grails documentation(executeQuery 部分)所述,分页参数可以作为额外参数添加到 executeQuery。
User.executeQuery("select distinct user from User user", [max: 2, offset: 2])
关于grails - GORM createCriteria 和 list 不返回相同的结果 : what can I do?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3905476/