1

私は休止状態と 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 "  );      

このエラーの考えられる理由は、私のクエリには当てはまらないようです。これは、グループ化関数 SUM を含めており、グループ化されていない式が選択に含まれていないためです。

また、必要なことを行うために基準クエリを作成しようとしましたが、それも機能しませんでした。基準バージョンでは、取得したデータに制限を追加する方法と、データを 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();

どんな助けでも大歓迎です。ありがとう!


更新: どうもありがとうございました! 「左結合フェッチ 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