0

JPQL では、これと同等のクエリを作成したいと思います。

select *, count(*) as finger_count from page_delta_summary 
where delta_history_id = ? and change_type = ? group by fingerprint;

wherefingerprintは table の 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" に対するクエリ "select d, count(d) from PageDeltaSummary d where d.deltaHistoryId = :deltaHistoryId and d.type = :pageDeltaType GROUP BY d.fingerprint" は無効です。 select 句と having 句には、グループ化句にも表示される集計または値のみを含める必要があります。

count(d) を finger_count として削除するか、GROUP BY を削除すると、クエリは正常に機能します。

助言がありますか?

ありがとう

4

1 に答える 1

2

元の SQL クエリは意味をなさないため、JPQL に変換できません。

それぞれのpage_delta_summary条件を満たす行の数を取得したいと思います。その場合、SQL クエリは次のようになります。wherefingerprint

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

于 2010-11-23T12:55:56.093 に答える