首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grails spring-security UserRole - Role获取:'join‘

Grails spring-security UserRole - Role获取:'join‘
EN

Stack Overflow用户
提问于 2013-01-11 20:33:05
回答 1查看 538关注 0票数 0

我有典型的由spring-security类自动生成的类。+我想在一个查询中选择角色和UserRoles (表连接),因此我添加了fetch:'join‘。

代码语言:javascript
复制
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?

EN

回答 1

Stack Overflow用户

发布于 2013-01-13 08:40:35

在我解释官方文档时,grails在为用户执行多项选择时使用fetch (findBy非唯一属性方法),而lazy用于唯一结果(get或findBy唯一属性方法)。

官方文档:

延迟抓取:http://grails.org/doc/latest/ref/Database%20Mapping/lazy.html

  • Eager和延迟抓取:http://grails.org/doc/latest/guide/single.html#fetching

  • lazy

你试过lazy的方法吗?

另一种可能是关于spring-security本身的实现,这是java实现的门户,并且不知道来自gorm的信息(可能只翻译java代码)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14278295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档