我有典型的由spring-security类自动生成的类。+我想在一个查询中选择角色和UserRoles (表连接),因此我添加了fetch:'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‘指令?它是不是以某种方式依赖于spring-security?
发布于 2013-01-13 08:40:35
在我解释官方文档时,grails在为用户执行多项选择时使用fetch (findBy非唯一属性方法),而lazy用于唯一结果(get或findBy唯一属性方法)。
官方文档:
延迟抓取:http://grails.org/doc/latest/ref/Database%20Mapping/lazy.html
你试过lazy的方法吗?
另一种可能是关于spring-security本身的实现,这是java实现的门户,并且不知道来自gorm的信息(可能只翻译java代码)。
https://stackoverflow.com/questions/14278295
复制相似问题