1

この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_nameascを誤ってORDERBYステートメントに入れて、クラッシュさせています。これは、プロジェクト条件でJoinType.LeftOuterJoinを使用した場合にのみ発生します。これは既知のnhibernateバグですか?nhibernate2.0.1.4000を使用しています。洞察をありがとう。

4

2 に答える 2

0

古いことは知っていますが、同じ問題に遭遇しました。

順序付けは、コレクション マッピングで定義されました。あなたの場合、おそらくFundingPrograms. 電話してもクリアできない.ClearOrders()

私の解決策は、あなたの場合、ソートしようとするプロパティにグループ化を追加することでした .Add(Projections.Group(() => p.name))

于 2012-09-25T08:07:01.003 に答える
0

これを nh jira フォーラムにバグとして投稿しました。

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

于 2009-05-04T17:49:15.057 に答える