我有一个与IRole对象有关的MTM IUser对象列表。这些IRole对象又是与IPrivilege对象相关的MTM。
检索IUser对象时,我可以在此IUser的(IList)列表中看到所有相关的IRole对象。
检索IRole对象时,我可以在此IRole的(IList)列表中看到所有相关的IPrivilege对象。
但是当我获取用户并从该用户角色列表中检查一个角色时,该角色对象中的权限列表为空(在直接获取角色时正确初始化列表)。
看起来NHibernate没有在我的设置中获取相关对象的相关对象。我究竟做错了什么?如何让NHibernate完全初始化用户角色列表中的所有角色对象,以便每个角色显示相关权限列表?
顺便说一句:注意!我是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 :(得分:1)
您需要为映射或查询中的所有关系设置获取模式。例如:
var data = Session.CreateCriteria<User>()
.CreateAlias("Role", "r", JoinType.InnerJoin)
.SetFetchMode("r.Privelege", FetchMode.Join)
.List<User>();