Oracle中的Hibernate HQL Group By

时间:2014-10-15 13:43:59

标签: oracle hibernate hql

我使用HQL和Hibernate和Oracle

创建了这个查询
select c from Cat c
 left join c.kittens k
 where (c.location= 1 OR c.location = 2)
 and (i.activo = 1)
 group 
 by c.id,
 c.name,
 c.fulldescription,
 c.kittens
 order by count(e) desc

问题在于,在HQL中,您需要指定Cat中的所有字段才能执行分组依据,但fulldescription是CLOB,并且您不能通过CLOB分组(我得到了一个"而不是一个按表达式分组"错误。我已经看到了一些纯SQL术语的解决方案,但是对于HQL没有。

1 个答案:

答案 0 :(得分:1)

GROUP BY的严重问题HQL,因为如果您在GROUP BYSELECT字段列表中指定对象,则行为是不同的。在GROUP BY中只考虑了id字段,但在SELECT字段列表中考虑了所有字段。

因此,你可以使用带有GROUP BY的子查询来返回对象中的id,这样结果就会成为主查询的输入,就像我为你写的那样。

注意有一些别名表(i和e)没有定义,所以这个查询不起作用,但你知道它是固定的。

试试这个:

select c2 from Cat c2
where c2.id in (
  select c.id from Cat c
  left join c.kittens k
  where (c.location= 1 OR c.location = 2)
  and (i.activo = 1) <-- who is i alias??
  group by c.id)
order by count(e) desc <-- who is e alias???