2009-04-29 87 views
1

爲什麼這個nhibernate條件查詢會在下面生成sql查詢?當使用JoinType.LeftOuterJoin和Projections時,Nhibernate條件查詢按表達式插入額外的順序

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遞增到ORDER BY語句,並導致其崩潰。這隻發生在我的項目標準上使用JoinType.LeftOuterJoin。這是一個已知的nhibernate錯誤嗎?我使用的是nhibernate 2.0.1.4000。感謝您的任何見解。

+0

嗨清除它,你找到了一個解決方案?我有點面臨同樣的問題... – 2012-06-12 08:45:14

回答

0

我知道這是舊的,但我遇到了同樣的問題。

排序是在集合映射中定義的。在你的情況下,可能在FundingPrograms項目的映射。 你不能可以通過調用.ClearOrders()

我的解決辦法是在它試圖排序的屬性添加分組,你的情況 .Add(Projections.Group(() => p.name))

相關問題