1

为什么这个休眠条件查询会产生下面的 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 语句中,并导致它崩溃。这只发生在我对我的项目标准使用 JoinType.LeftOuterJoin 时。这是一个已知的休眠错误吗?我正在使用休眠 2.0.1.4000。感谢您的任何见解。

4

2 回答 2

0

我已将此作为错误发布在 nh jira 论坛上。

https://nhibernate.jira.com/browse/NH-1761

于 2009-05-04T17:49:15.057 回答
0

我知道它很旧,但我遇到了同样的问题。

排序是在集合映射中定义的。在您的情况下,可能是FundingPrograms. 你不能通过调用来清除它.ClearOrders()

我的解决方案是在您尝试排序的属性上添加一个分组 .Add(Projections.Group(() => p.name))

于 2012-09-25T08:07:01.003 回答