在JPQL我要建构等效查询这样:

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

其中fingerprint是在表page_delta_summary一个varchar字段。我所拥有的是这样的:

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” 与来自PageDeltaSummary d过滤器“选择d,计数(d)的查询,其中d.deltaHistoryId =:deltaHistoryId和d.type =:pageDeltaType GROUP BY d.fingerprint”是无效的。 您选择并具有条款必须只包括聚集体或值也出现在分组子句中

查询工作正常,如果我除去任一计数(d)作为finger_count或GROUP BY。

任何建议?

由于

有帮助吗?

解决方案

您原始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

这些查询返回的对<fingerprintfinger_count>代替全page_delta_summary行(或实体)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top