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 的所有金额字段的总和。

billPaidDetailsesBillDetails 类中的一个列表。

我正在尝试跟踪查询,但它不起作用

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 查询以获取数据和金额总和的主要内容,如果未能解决你的问题,请参考以下文章

获取具有不同类型和名称的特定ID mysql的总和

Amazon Redshift 查询以在月底获取拖欠金额和逾期天数

查询从 3 个表中获取数据,主表和总和列从彼此 2 个表中获取

Pyspark - 获取具有条件的列的累积总和

变量没有从 SQl 查询中获取数据

SQL查询以在给定条件下明确获取总和