首页 > 解决方案 > 在 ORA-00979 中 Hibernate + Oracle Group By 结果:不是 GROUP BY 表达式错误

问题描述

我有以下 Hibernate HQL 查询:

select t from Term t join ApprovedCourse ap on t.id = ap.term.id group by t order by t desc

它失败了

ORA-00979: not a GROUP BY expression

错误,因为 Oracle 坚持所有选择值都在分组依据中。当然,Hibernate 对我们隐藏了 Term 对象的各个字段,让我们将其作为 Term 而不是 Term.id 来处理。(顺便说一下,这个查询适用于 Postgres。Postgres 对它的分组要求更加自由。)

Hibernate 正在生成以下 SQL:

select term0_.id as id1_12_, term0_.semester_id as semester_id2_12_, term0_.year_id as year_id3_12_ 
  from term term0_ 
 inner join approved_course approvedco1_ 
    on (term0_.id=approvedco1_.term_id) 
 group by term0_.id 
 order by term0_.id desc

我尝试select t从查询的开头删除 ,但是 Hibernate 假设我同时选择了 Term 和 ApprovedCourse 对象,这让事情变得更糟。

那么如何以 Hibernate 方式进行这项工作呢?

标签: oraclehibernategroup-by

解决方案


我发现我可以通过在 select 子句中用 distinct 替换 group by 子句来得到我想要的。这是结果查询:

select distinct(t) from Term t join ApprovedCourse ap on t.id = ap.term.id  order by t desc

推荐阅读