私は休止状態と 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 コードがあるフォルダーです。