hql 查询以获取数据和金额总和
Posted
技术标签:
【中文标题】hql 查询以获取数据和金额总和【英文标题】:hql query to fetch data and sum of amount 【发布时间】:2014-07-10 09:36:59 【问题描述】:我正在编写查询以从表中获取数据
我的 hql 查询是
SELECT distinct bd FROM BillDetails AS bd
LEFT JOIN FETCH bd.customerDetails AS cd
LEFT JOIN FETCH bd.billProductList AS bpd
LEFT JOIN FETCH bpd.product AS pd
WHERE bd.billNo=:id
AND bd.client.id=:cid
以上查询正常
我想编写查询来获取billPaidDetailses
的所有金额字段的总和。
billPaidDetailses
是BillDetails
类中的一个列表。
我正在尝试跟踪查询,但它不起作用
String hql = "select distinct bd,sum(bpds.amount) from BillDetails as bd "
+ "left join fetch bd.customerDetails as cd "
+ "left join fetch bd.billProductList as bpd "
+ "left join fetch bpd.product as pd "
+"left join fetch bd.billPaidDetailses as bpds "
+ "where bd.billNo=:id "
+ "and bd.client.id=:cid ";
返回的错误是
org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch
multiple bags
【问题讨论】:
你确定聚合函数,这个案例sum()
可以和join
一起使用吗?
如何尝试使用此查询select sum(bpd.amount) from BillDetails as bd left join fetch bd.customerDetails as cd left join fetch bd.billProductList as bpl left join fetch bpd.product as pd left join fetch bd.billPaidDetailses as bpd where bd.billNo=:id and bd.client.id=:cid
@suninsky 查看更新的查询
叹息,又一个“不工作”。您为什么不发布您遇到的错误并大大增加实际获得帮助的机会?它不像人们可以简单地获取您的 HQL 并自己执行它以查看发生了什么。
@Gimby 我再次尝试查询,它显示org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
【参考方案1】:
引用Hibernate manual:
Hibernate 目前也不扩展分组实体,所以你 如果 cat 的所有属性都是非聚合的,则不能按 cat 编写 group。 您必须明确列出所有非聚合属性。
这意味着您必须为所有连接的实体添加所有属性:
BillDetails bd bd.customerDetails 光盘 bd.billProductList bpd bpd.product pd为您提供 HQL 查询,例如:
select distinct bd, sum(bpds.amount)
from BillDetails as bd "
left join fetch bd.customerDetails as cd
left join fetch bd.billProductList as bpd
left join fetch bpd.product as pd
left join fetch bd.billPaidDetailses as bpds
where
bd.billNo=:id and bd.client.id=:cid
group by
bd.id,
bd.propertyA,
bd.propertyB,
cd.id,
cd.propertyC,
cd.propertyD,
pd.id,
pd.propertyE,
pd.propertyF,
bpds.id,
bpds.propertyG,
bpds.propertyH
与原生 SQL 查询相比,唯一的优势是 Hibernate 设法在层次结构中重新组合实体。
【讨论】:
以上是关于hql 查询以获取数据和金额总和的主要内容,如果未能解决你的问题,请参考以下文章
Amazon Redshift 查询以在月底获取拖欠金额和逾期天数