hql可以使用distinct吗_hibernate中的hql不支持sum(distinct)语句

在进行数据统计时,经常会使用聚合函数,在hibernate中也支持聚合函数。如进行以下的统计查询:

在上面的数据模型中,成绩与参赛运动员为一对多关系,即可能为多个运动员以团体参赛的形式参加一个项目,最终取得一条成绩。运动员与学校为多对一关系。在上面的查询中,为避免在同一个成绩中,由团体参赛的运动员来自同一个学校,因为只能记为一个奖牌,而不是N(N为参赛运动员数量)。因此,需要使用distinct对重复的成绩进行过滤,并按学校分组。

在正常的sql查询下,现在的数据库已经支持在sum聚合函数中进行distinct操作了。而在hibernate中,使用如此的查询会报一个如下的错误:

即不支持在sum函数中带有distinct语句,在相关的bug列表中。网页:https://hibernate.onjira.com/browse/HHH-6311 也描述了这一问题,且值到现在还没有解决。那么为什么会产生这个错误呢,这是由hibernate将hql转换为sql的过程中产生的,即在hibernate的语法树中,就不支持这样的写法。相关的语法描述中,针对聚合函数是这样的(在源文件hql.g中)

在上面的描述中,只有count支持带distinct或all描述语句,而其它的如sum,avg,max,min均不支持,因此在进行转换时即会产生异常。因为,只能采用sql的方法实现上面的统计查询了。好在使用session.createSQLQuery,只需要将hql进行简单的人工转换再加上addScalar进行结果类型转换即能实现操作,实现上难度不大。

相关文章:

作者: flym

I am flym,the master of the site:)查看flym的所有文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值