Запрос критериев Nhibernate вставляет дополнительный порядок по выражению при использовании JoinType.LeftOuterJoin и Projection - PullRequest
1 голос
/ 29 апреля 2009

Почему этот запрос критерия 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 и вызывает его сбой. Это происходит только тогда, когда я использую JoinType.LeftOuterJoin в моих критериях проектов. Это известная ошибка nhibernate? Я использую nhibernate 2.0.1.4000. Спасибо за понимание.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2012

Я знаю, что он старый, но я столкнулся с той же проблемой.

Порядок был определен в отображении коллекции. В вашем случае возможно отображение проектов в FundingPrograms. Вы не можете очистить его, позвонив .ClearOrders()

Мое решение состояло в том, чтобы добавить группировку по свойству, по которому оно пытается сортироваться, в вашем случае .Add(Projections.Group(() => p.name))

0 голосов
/ 04 мая 2009

Я опубликовал это как ошибку на форуме nh jira.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...