セキュリティ フレームワークにNimbleとShiroを使用していますが、GORM のバグに遭遇しました。それはそう :
User.createCriteria().list {
maxResults 10
}
10 人のユーザーを返しますが、9 人のユーザーをUser.list(max: 10)
返します。
さらに調査した結果、管理者には2つのロールがあるため、同じユーザー(管理者)createCriteria
が2回返されることがわかりました!!! (冗談じゃない)。
複数のロールを持つユーザーは、createCriteria
呼び出しで2 回返され、インスタンスUser.list
が返されるmax-1
ようです (つまり、10 ユーザーではなく 9 ユーザー)。
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
}
}