2010-10-11 60 views
3

我有以下hql。这工作正常,如果我不尝试并包含“OrderItem”实体。我知道hql中没有“on”子句。什么是最好的方式来加入orderItemhql join - 加入的路径

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 

回答

0

使用try的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 Non-Mapped Joins

+0

这是行不通的。左连接的语法仍然不正确。 – 2010-10-11 14:11:07

2

为了使用HQL左的连接,您必须映射关系,为路径从一个预计“从”表(参见13.3. Associations and joins

尝试更改OrderItems.Product id转换为合适的产品many-to-one,并使用right join

作为一个侧面说明,您的实体名称应该是单数。看起来你只是将表结构复制为类。