我使用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没有。
答案 0 :(得分:1)
GROUP BY
的严重问题HQL
,因为如果您在GROUP BY
和SELECT
字段列表中指定对象,则行为是不同的。在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???