2009-04-29 4 views
1

なぜこのnhibernate条件クエリは以下のsqlクエリを生成しますか?Nhibernate基準クエリは、JoinType.LeftOuterJoinと投影を使用するときに式で余分な順序を挿入します

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 

それは間違ってORDER BYステートメントにp2_nameのASCを入れて、それがクラッシュする原因となっています。これは、私のProjects基準でJoinType.LeftOuterJoinを使用する場合にのみ発生します。これは既知のnhibernateバグですか?私はnhibernate 2.0.1.4000を使用しています。どんな洞察もありがとう。

+0

こんにちはで、.ClearOrders()

私のソリューションは、それが上の並べ替えしようとする財産上のグループを追加することでした呼び出すことによって、それをクリアすることができないのですか?私は同じ問題に直面しています... –

答えて

0

私はそれが古いです知っているが、私は同じ問題に遭遇しました。

注文はコレクションマッピングで定義されました。あなたの場合はおそらくFundingProgramsのプロジェクトのマッピング。 あなたは、このための解決策を見つけた、あなたのケース .Add(Projections.Group(() => p.name))

関連する問題