OpenJPA:グループカウントでクエリによってグループを構築する方法

StackOverflow https://stackoverflow.com/questions/4255543

質問

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 行(またはエンティティ)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top