2011-11-16 49 views
0

我有一個與IRole對象相關的IUser對象列表。這些IRole對象又是與IPrivilege對象相關的MTM。在NHibernate中未加載的依賴對象中的集合

當檢索一個IUser對象時,我可以在該IUser的(IList)列表中看到所有相關的IRole對象。

當檢索一個IRole對象時,我可以在該IRole的(IList)列表中看到所有相關的IPrivilege對象。

但是,當我獲取用戶並從該用戶角色列表中檢查一個角色時,該角色對象中的特權列表爲空(列表在直接提取角色時正確初始化)。

看起來好像NHibernate沒有在我的設置中獲取相關對象的相關對象。我究竟做錯了什麼?我如何讓NHibernate完全初始化用戶角色列表中的所有角色對象,以便每個角色都能顯示相關特權列表?

BTW:注意!我是NHibernate的新手!

編輯(@Firo):

這些是從IUSER和IRole的關係的映射片段:

(IUSER)

... 
HasManyToMany<HbnRole>(x => x.Roles).Table("USERROLEMAP") 
            .ParentKeyColumn("USERID") 
            .ChildKeyColumn("ROLEID") 
            .Cascade.All(); 

(IRole)

... 
HasManyToMany<HbnPrivilege>(x => x.Privileges).Table("ROLEPRIVILEGEMAP") 
               .ParentKeyColumn("ROLEID") 
               .ChildKeyColumn("PRIVILEGEID") 
               .Cascade.All(); 

HasManyToMany<HbnUser>(x => x.Users).Table("USERROLEMAP") 
            .Inverse() 
            .LazyLoad() 
            .ParentKeyColumn("ROLEID") 
            .ChildKeyColumn("USERID"); 

(IPrivilege)

... 
HasManyToMany<HbnRole>(x => x.Roles).Table("ROLEPRIVILEGEMAP") 
            .Inverse() 
            .LazyLoad() 
            .ParentKeyColumn("PRIVILEGEID") 
            .ChildKeyColumn("ROLEID"); 

說實話,我不知道如何捕捉查詢... :-(

+0

你能告訴我們用戶和角色和查詢的映射嗎? – Firo

回答

0

您需要設置獲取模式的所有關係無論是在映射或查詢。例如:

var data = Session.CreateCriteria<User>() 
       .CreateAlias("Role", "r", JoinType.InnerJoin) 
       .SetFetchMode("r.Privelege", FetchMode.Join) 
       .List<User>();