hibernate - 在hql中使用'having'而不使用group by子句

时间:2012-09-27 16:23:10

标签: oracle hibernate

即时尝试运行一个hql查询,该查询会累计(总和)特定帐户上的交易次数,因为我的where子句有一个特定的帐户过滤器(其中account =:account),所以我不需要一个组

但是,我确实希望仅在聚合值小于/大于某个给定值时才返回聚合值。 当我在where子句后添加'having'时没有'group by'我得到一个错误 - 意外的令牌:有

在原生sql中我成功添加了'having'而没有分组

关于如何使用hql的任何想法?

非常感谢

3 个答案:

答案 0 :(得分:0)

数据库不允许您将分组列与非分组和非聚合列混合的原因是,对于非分组/非聚合列,它必须为每个组选择一行的值,但不会我知道如何选择一个。

如果你不在乎,那么你可以放弃它,如果它们无关紧要,因为它们都是一样的,你也可以按它们分组。

答案 1 :(得分:0)

它不是hql,但如果你有本机查询,那么运行它:

Query query = session.createSQLQuery("select, *** ,... blah blah")
//set If you need
query.setParameter("myparam", "val"); 
List result = query.list();

答案 2 :(得分:-1)

在我眼里,这是胡说八道。 'have'是针对'group by'结果的条件完成的。如果你没有分组,那就没有多大意义了。

我会说HQL不能这样做。可能Hibernate程序员没有想到这种情况,因为他们认为它并不重要。

无论如何,你不需要它。

如果是简单查询,那么您可以在java代码中决定是否需要结果,或者如果您不需要结果。

如果它在子选择中,那么您可以通过主选择中的where条件来解决问题。

如果您认为确实有必要,那么请您提供一个更具体的例子。