1

我是 hibernate 和 Java 的新手,所以如果这些只是荒谬的简单问题,我深表歉意。

我不明白为什么下面的查询会给我错误“ORA-00979:不是 GROUP BY 表达式”。

    Query q = session.createQuery (
                "select new tdata.Summary(tbForm.rYear, SUM(tbForm.pWaste)) " 
              + "from TrForm tbForm "
              + "left join fetch tbForm.indKey "        
              + "where tbForm.indKey.grpCode='999' " 
              + "group by tbForm.rYear "  );      

此错误的可能原因似乎不适用于我的查询,因为我包含 group by 函数 SUM,并且我在 select 中没有任何不在 group by 中的表达式。

我还尝试编写一个条件查询来做我需要的事情,但我也无法让它工作。在标准版本中,我对如何为获取的数据添加限制以及如何将数据放入 Summary 对象感到困惑。

Criteria criteria = session.createCriteria(TrForm.class)
                          .setFetchMode("DimInd",FetchMode.JOIN) 
                          .add(Restrictions.eq("indKey.indCode", "999")) 
                          .setProjection(Projections.projectionList()
                                    .add(Projections.groupProperty("rYear"))
                                    .add(Projections.sum("pWaste")));
summaryList = (List<Summary>) criteria.list();

任何帮助将不胜感激。谢谢!


更新:非常感谢!我删除了“left join fetch tbForm.indKey”并且 HQL 版本有效!

广义查询是

select R_YEAR, sum(P_WASTE) 
from TR_FORM tbForm 
left join DIM_IND ind 
on tbForm.IND_KEY = ind.IND_KEY 
where ind.GRP_CODE='999' 
group by tbForm.R_YEAR

tdata 是我拥有数据模型的 java 代码的文件夹。

4

0 回答 0