OpenJPA的:如何构建一个GROUP BY查询与组数
题
在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
这些查询返回的对<fingerprint
,finger_count
>代替全page_delta_summary
行(或实体)。
不隶属于 StackOverflow