0
我有典型的自动生成的spring-security类。 +我想在一个查询中选择Roles和UserRoles(表连接),因此我添加了fetch:'join'。Grails spring-security UserRole - 角色提取:'join'
class User {
def springSecurityService
String username
String password
static hasMany = [userRoles: UserRole]
Set<Role> getAuthorities() {
if (!this.id) {return []}
def userAuthorities= userRoles*.role
return userAuthorities
}
}
class UserRole implements Serializable {
User user
Role role
...
static mapping = {
table 'UserRole'
version false
id composite: ['role', 'user']
user column: 'UserID'
role column: 'RoleID', fetch: 'join'
}
class Role {
String authority
String description
static mapping = {
cache true
table 'Role'
id column: 'RoleID', generator: 'identity'
authority column: 'Authority'
description column: 'Description'
}
但我仍然得到角色的初始化工作,只有当我访问它getAuthorities()。它会导致'N + 1'查询性能问题。为什么grails/hibernate忽略fetch:'join'指令?它在某种程度上取决于春季安全吗?
有它的设计就像是在设计的原因第一名。 –