为什么这个nhibernate条件查询会在下面生成sql查询?
return Session.CreateCriteria(typeof(FundingCategory), "fc")
.CreateCriteria("FundingPrograms", "fp")
.CreateCriteria("Projects", "p", JoinType.LeftOuterJoin)
.Add(Restrictions.Disjunction()
.Add(Restrictions.Eq("fp.Recipient.Id", recipientId))
.Add(Restrictions.Eq("p.Recipient.Id", recipientId))
)
.SetProjection(Projections.ProjectionList()
.Add(Projections.GroupProperty("fc.Name"), "fcn")
.Add(Projections.Sum("fp.ObligatedAmount"), "fpo")
.Add(Projections.Sum("p.ObligatedAmount"), "po")
)
.AddOrder(Order.Desc("fpo"))
.AddOrder(Order.Desc("po"))
.AddOrder(Order.Asc("fcn"))
.List<object[]>();
SELECT this_.Name as y0_,
sum(fp1_.ObligatedAmount) as y1_,
sum(p2_.ObligatedAmount) as y2_
FROM fundingCategories this_
inner join fundingPrograms fp1_
on this_.fundingCategoryId = fp1_.fundingCategoryId
left outer join projects p2_
on fp1_.fundingProgramId = p2_.fundingProgramId
WHERE (fp1_.recipientId = 6 /* @p0 */
or p2_.recipientId = 6 /* @p1 */)
GROUP BY this_.Name
ORDER BY p2_.name asc,
y1_ desc,
y2_ desc,
y0_ asc
将p2_name asc错误地放入ORDER BY语句并导致其崩溃。只有在我的Projects条件中使用JoinType.LeftOuterJoin时才会发生这种情况。这是一个已知的nhibernate错误吗?我正在使用nhibernate 2.0.1.4000。感谢您的任何见解。
答案 0 :(得分:0)
我在nh jira论坛上发布了这个错误。
答案 1 :(得分:0)
我知道它已经老了,但我遇到了同样的问题。
排序是在集合映射中定义的。在您的情况下,可能是FundingPrograms
中项目的映射。
您无法通过调用.ClearOrders()
我的解决方案是在您尝试排序的属性上添加分组,在您的情况下
.Add(Projections.Group(() => p.name))