fab*_*474 7 grails grails-orm shiro nimble
我正在使用Nimble和Shiro作为我的安全框架,我刚刚遇到一个GORM错误.确实 :
User.createCriteria().list {
maxResults 10
}
Run Code Online (Sandbox Code Playgroud)
返回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
}
}
Run Code Online (Sandbox Code Playgroud)
不太简洁和清晰,但使用 HQL 查询似乎是解决这个问题的一种方法。如Grails 文档(executeQuery 部分)中所述,可以将分页参数作为额外参数添加到executeQuery。
User.executeQuery("select distinct user from User user", [max: 2, offset: 2])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12198 次 |
最近记录: |