0

在 JPQL 中,我想构造与此等效的查询:

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

fingerprinttable 中的 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:您对类型“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满足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行(或实体)。

于 2010-11-23T12:55:56.093 回答