hql join - 连接的预期路径
我有以下 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
I have the following hql. This works fine if i don't try and include the "OrderItem" entity. I understand that there is no "on" clause in hql. What is the best way to join 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);
Here is the sql i wish to achieve.
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
为了使用 HQL 左联接,您必须映射关系,因为需要来自“from”表之一的路径(请参阅13.3. 关联和联接)
尝试将
OrderItems.Product
id 更改为正确的产品many -to-one
,并使用右连接
。作为旁注,您的实体名称应该是单数。看起来您只是将表结构复制为类。
In order to use HQL left joins, you must map the relationships, as a path from one of the "from" tables is expected (see 13.3. Associations and joins)
Try changing
OrderItems.Product
id to a proper Productmany-to-one
, and use aright join
.As a side note, your entity names should be singular. It looks like you are just replicating your table structure as classes.
尝试使用
where
而不是with
:NHibernate 非映射连接
Try using a
where
instead of awith
:NHibernate Non-Mapped Joins