gpt4 book ai didi

java - OpenJPA:如何构建具有组计数的 GROUP BY 查询

转载 作者:行者123 更新时间:2023-12-02 08:27:14 25 4
gpt4 key购买 nike

在 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:您对类型“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,则查询工作正常。

有什么建议吗?

谢谢

最佳答案

您的原始 SQL 查询没有意义,因此您无法转换为 JPQL。

我猜您想获取每个指纹满足where条件的page_delta_summary行数。如果是这样,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行(或实体)。

关于java - OpenJPA:如何构建具有组计数的 GROUP BY 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4255543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com