NHibernate:获取多对多时如何指定条件?
想法是获取所有组并获取成员。我无法仅获取活动用户。你能帮我吗 映射:NHibernate:获取多对多时如何指定条件?,nhibernate,Nhibernate,想法是获取所有组并获取成员。我无法仅获取活动用户。你能帮我吗 映射: public class GroupDtoMap : DtoClassMap<GroupDto> { public GroupDtoMap() { Id(g => g.Id, "group_id"); HasManyToMany(g => g.Members) // Members is a List<UserDto>
public class GroupDtoMap : DtoClassMap<GroupDto>
{
public GroupDtoMap()
{
Id(g => g.Id, "group_id");
HasManyToMany(g => g.Members) // Members is a List<UserDto>
.Table("members")
.ParentKeyColumn("group_id")
.ChildKeyColumn("user_id");
}
}
var groups = Session
.CreateCriteria<GroupDto>()
.Add(Expression.Eq("IsActive", true)) // Get only active groups
.SetFetchMode("Members", NHibernate.FetchMode.Eager)
.SetResultTransformer(new DistinctRootEntityResultTransformer())
.Future<GroupDto>();
HasManyToMany(g => g.Members)
.Table("members")
.ParentKeyColumn("group_id")
.ChildKeyColumn("user_id")
.ChildWhere("status = 1");// the column in DB is 'status' with values 0/1
编辑:
好啊看起来ChildWhere()实际上正在工作。那是一个肮脏的储藏室。现在的问题是如何强制内部联接获取集合。目前它正在做左外连接。有什么想法吗?据我所知,你不能。抱歉。但据我所知,您可以尝试使用映射。抱歉。但是您可以一直尝试使用映射是成员表上的状态列吗?HQL对于此类查询更容易、更灵活。(
大小
,存在
,元素
等。请参阅参考手册:)我认为使用HQL编写此查询更加困难:|使用此HQL我获得了正确的sql,但成员属性未初始化:Session.CreateQuery(@“选择gr,组中的成员作为gr内部联接获取gr.Members作为成员,其中gr.IsActive=true,member.Id!=null”).SetResultTransformer(Transformers.DistincTrotenty).Future()当您对联接列进行筛选时,将忽略fetch,因为它可能不会返回所有子项来填充集合。成员表上的status列?HQL对于此类查询更容易、更灵活。(size
,exists
,elements
等。请参阅参考手册:)我认为使用HQL编写此查询更加困难:|使用此HQL我得到了正确的sql,但成员属性未初始化:Session.CreateQuery(@)选择gr,gr中的成员作为gr内部联接获取gr.Members作为成员,其中gr.IsActive=true,member.Id!=null”).SetResultTransformer(Transformers.distinctropenty).Future()在对联接列进行筛选时,将忽略fetch,因为它可能不会返回所有子项来填充集合