OpenJPA:グループカウントでクエリによってグループを構築する方法
質問
JPQLでは、これに等価クエリを作成したいと思います。
select *, count(*) as finger_count from page_delta_summary
where delta_history_id = ? and change_type = ? group by fingerprint;
どこ fingerprint
表のVarcharフィールドです page_delta_summary
. 。私が持っているのはこれです:
select d, count(d) as finger_count from PageDeltaSummary d
where d.deltaHistoryId = :deltaHistoryId and d.type = :pageDeltaType
GROUP BY d.fingerprint"
どこ PageDeltaSummary
私のエンティティです。しかし、私は次の例外を取得しています:
org.apache.openjpa.persistence.argumentexception:タイプ「class com.su3analytics.sitedelta.model.pagedeltasummary "with filt" from pagedeltasummary d from pagedeltahistoryid =:deltahistiryid and d.typee d、count(d)from from from from from from from from from from from from from from from from from from select(d)のクエリ=:d.fingerprintによるpagedeltatypeグループは無効です。 選択と条項には、グループ化句にも表示される集合体または値のみを含める必要があります。
count(d)をfinger_countとして削除するかグループまたはグループを削除すると、クエリは正常に機能します。
助言がありますか?
ありがとう
解決
元のSQLクエリは意味がないため、JPQLに変換することはできません。
私はあなたが数えたいと思うと思います page_delta_summary
満足のいく行 where
それぞれの条件 fingerprint
. 。もしそうなら、SQLクエリは次のようになります:
select fingerprint, count(*) as finger_count from page_delta_summary
where delta_history_id = ? and change_type = ? group by fingerprint;
とjpql-このように:
select d.fingerprint, count(d) from PageDeltaSummary d
where d.deltaHistoryId = :deltaHistoryId and d.type = :pageDeltaType
GROUP BY d.fingerprint
これらのクエリはペアを返しますfingerprint
, finger_count
>フルの代わりに page_delta_summary
行(またはエンティティ)。