使用HasMany / BelongsTo链查找

时间:2014-05-07 17:04:37

标签: grails join

我正在尝试从一系列通过havingMany / belongsTo属性链接在一起的域类中获取项目列表 - 这里是链的概述:

OrganisationShr  ---- (hasMany) ->  
     UserShr ---- (hasMany) -> 
     VideoShr ---- (hasMany) -> 
     PublishedShr

我想获得一个组织的所有已发布的列表,该组织由当时登录的用户标识。

要识别组织,我必须从当前登录的用户上升链。一旦找到组织,就可以通过简单的链搜索来获取已发布的列表。

但我的问题是从当前登录用户上升到组织 - 这是我正在使用的查找代码:

从会话用户名中找到用户:

def usersId = UserShr.findByName(session.user.name)

returnValue = PublishedShr.findAll
{ 
    VideoShr.findAll{
            UserShr.findAll{OrganisationShr.findAll{idEq(UserShr.get(usersId))}}
    }
}

我一直在尝试围绕这个基本查找结构的各种不同方法。

我知道我可以设置一个条件条件来进行这种类型的连接。然而,动态查找器方法对我来说似乎更简单 - 因为我对这些类型的连接的经验有限。此外,在任何时候将连接发现放在一起的能力似乎都很强大且灵活 - 我想必须有一些回归这样做,如性能/响应?很高兴指向一个合适的网站链接,以了解更多信息。

提前致谢。

更新

每个域类的关注部分:

class OrganisationShr { 
    static hasMany = [userId: UserShr]

    static fetchMode = [userId: 'eager'] 
} 

class UserShr { 
    static belongsTo = [ organId: OrganisationShr] 
    static hasMany = [videoId: VideoShr]

    static fetchMode = [videoId: 'eager'] 
} 

class VideoShr { 
    static belongsTo = [ userId: UserShr] 
    static hasMany = [publId: PublishedShr] 

    static fetchMode = [publId: 'eager']
} 

class PublishedShr { 
    static belongsTo = [ videoId: VideoShr] 
}

0 个答案:

没有答案