Я использую Nimble и Shiro для моих систем безопасности, и я только что столкнулся с ошибкой GORM. Верно :
User.createCriteria().list {
maxResults 10
}
возвращает 10 пользователей, тогда как User.list(max: 10)
возвращает 9 пользователей!
После дальнейших исследований я обнаружил, что createCriteria
возвращает дважды одного и того же пользователя (админа) потому что у администратора 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
}
}