Oracle &引用;ORA-00979:不是一个“按表达式分组”;使用HibernateHQL

Oracle &引用;ORA-00979:不是一个“按表达式分组”;使用HibernateHQL,oracle,hibernate,hql,Oracle,Hibernate,Hql,我正在Oracle数据库中执行以下HQL查询: select p, count(e) from Entity p join p.elementsA l join l.elementsB e group by p order by p.name 这在MySQL数据库中工作得很好,但当我将方言更改为Oracle10g时,似乎并没有使用p中的所有字段来创建GROUPBY子句(如Oracle所要求的),从而生成“ORA-00979:不是GROUPBY表达式”。我理解,通过更改方言,Hiber

我正在Oracle数据库中执行以下HQL查询:

select p, count(e) 
from Entity p 
join p.elementsA l 
join l.elementsB e 
group by p 
order by p.name
这在MySQL数据库中工作得很好,但当我将方言更改为Oracle10g时,似乎并没有使用p中的所有字段来创建GROUPBY子句(如Oracle所要求的),从而生成“ORA-00979:不是GROUPBY表达式”。我理解,通过更改方言,Hibernate应该将此HQL转换为ORacle的有效SQL语句

我错了吗?我使用的是Oracle10g方言

编辑:现在我发现它不能将其他查询转换为Oracle方言。像这个:

select
        e 
    from
        Entity e 
    where
        e.idEntity in (
            :idList
        ) 
    order by
        field(e.idEntity ,
        :idList)

现在我了解到Oracle不支持按字段排序的语句,但HQL不应该将其正确地转换为Oracle语法(即,
orderbydecode(e.idEntity…)
)?

您是否尝试过查看此HQL查询生成的sql代码?您可以在hibernate.cfg.xml文件中使用
true
,它生成的SQL与使用MySQL方言时相同。问题是,在我的Oracle环境中,没有提到MySQL方言。这似乎是一个多年来一直没有解决的错误:这很令人惊讶,因为这不是一个罕见的情况。那么解决办法是什么呢?手动指定所有字段?否。这对HQL完全有效。