hql join - путь, ожидаемый для соединения - PullRequest
3 голосов
/ 11 октября 2010

У меня есть следующие hql. Это прекрасно работает, если я не пытаюсь включить сущность "OrderItem". Я понимаю, что в hql нет предложения "on". Как лучше всего присоединиться к orderItem

 var hql = new StringBuilder();
    hql.Append(
    @"select p.Id, p.Name, p.Description, p.ProductKey, p.CustomerSku, p.ImageUrl, p.ImageThumbUrl, p.ImageLargeUrl,COUNT(oi.Quantity) as quantity 
            from ProductCampaign pc
            join pc.Product p 
            left join OrderItem oi with oi.Product.Id = p.Id
            where pc.Campaign.Id = :CampaignId ");

   hql.Append(@"group by p.Id, p.Name, P.Description, p.ProductKey, p.CustomerSku, p.ImageUrl, p.ImageThumbUrl, p.ImageLargeUrl ");
   var results = _session.CreateQuery(hql.ToString());
   results.SetParameter("CampaignId", campaignId);

Вот sql, которого я хочу достичь.

select p.Id, p.name, p.description, p.ProductKey, p.CustomerSku, p.ImageUrl, p.ImageThumbUrl, p.ImageLargeUrl,COUNT(oi.Quantity) as quantity from ProductCampaign pc
inner join Products p on pc.ProductId = p.Id
left join orderitems oi on pc.ProductId = oi.ProductId
where pc.CampaignId = 1
group by  p.Id, p.name, p.description, p.ProductKey, p.CustomerSku, p.ImageUrl, p.ImageThumbUrl, p.ImageLargeUrl

Ответы [ 2 ]

2 голосов
/ 11 октября 2010

Чтобы использовать HQL-левые объединения, вы должны отобразить отношения, так как ожидается путь из одной из таблиц "from" (см. 13.3. Ассоциации и объединения ).

Попробуйте изменить OrderItems.Product id на правильный Product many-to-one и используйте right join.

. В качестве примечания, имена ваших сущностей должны быть в единственном числе.Похоже, вы просто копируете структуру таблицы как классы.

0 голосов
/ 11 октября 2010

Попробуйте использовать where вместо with:

select p.Id, p.Name, p.Description, p.ProductKey, p.CustomerSku, p.ImageUrl, p.ImageThumbUrl, p.ImageLargeUrl, COUNT(oi.Quantity) as quantity 
            from ProductCampaign pc
            join pc.Product p             
            left join OrderItem oi where oi.Product.Id = p.Id 
            and pc.Campaign.Id = :CampaignId

NHibernate не отображенные соединения

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