我需要在表上执行复杂的左连接,并且不确定如何使用条件查询编写代码。目前我有:nHibernate复杂连接
public IList<RezolutionConfig> GetSearchConfigByManagerCategoryProduct(int ManagerId, int ProductTypeId, int ConfigCategoryId)
{
ICriteria criteria = Session.GetISession().CreateCriteria(typeof(RezolutionConfig))
.CreateAlias("RezolutionConfigCategory", "rcc")
.Add(Expression.Eq("rcc.id", ConfigCategoryId))
.CreateAlias("RezolutionProductType","rpt")
.Add(Expression.Eq("rpt.id", ProductTypeId))
.CreateAlias("RezolutionManagerConfigs", "rmc", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
.CreateAlias("rmc.Manager", "m", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
.Add(Expression.Eq("m.id", ManagerId));
return criteria.List<RezolutionConfig>();
}
其产生:。
SELECT * FROM [DBO] [RezolutionConfig]在此THIS_ 内加入[DBO] [RezolutionConfigCategory] rcc1_ _ [RezolutionConfigCategoryId] = rcc1_。 [RezolutionConfigCategoryId] 内有关此加入[DBO]。[RezolutionProductType] rpt2_ _ [RezolutionProductTypeId] = RPT2 _ [RezolutionProductTypeId]在此 左外连接[DBO]。[RezolutionManagerConfig] rmc3_ _ [RezolutionConfigID] = RMC3 _ [RezolutionConfigID] left outer join [dbo]。[Manager] m4_ on rmc3 _。[ManagerID] = m4 _。[ManagerID] WH ERE RCC1 _ [RezolutionConfigCategoryId] = 1 和RPT2 _ [RezolutionProductTypeId] = 1 和M4 _ [经理ID = 9135
我需要产生是
SELECT * FROM [DBO]。[RezolutionConfig ] THIS_ 内有关此在此加入[DBO]。[RezolutionConfigCategory] rcc1_ _ [RezolutionConfigCategoryId] = RCC1 _ [RezolutionConfigCategoryId] 内加入[DBO]。[RezolutionProductType] rpt2_ _ [RezolutionProductTypeId] = RPT2 _ [RezolutionProductTypeId] 左外部连接[dbo]。[RezolutionManagerConfig] rmc3_ on this _。[RezolutionConfigID] = rmc3 _。[RezolutionConfigID] lef [RemaolutionConfigCategoryId] = 1 和rpt2 _ [RezolutionProductTypeId] = 1
[管理员]
在这种情况下,用HQL编写查询并不容易吗? – 2010-06-22 19:36:40