代码之家  ›  专栏  ›  技术社区  ›  Richard H

OpenJPA:如何使用组计数通过查询构造组

  •  0
  • Richard H  · 技术社区  · 14 年前

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

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

    哪里 fingerprint 是表中的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子句只能包含还出现在grouping子句中的聚合或值。

    如果删除count(d)作为finger_count或GROUP BY,则查询工作正常。

    有什么建议吗?

    谢谢

    1 回复  |  直到 14 年前
        1
  •  2
  •   axtavt    14 年前

    原来的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
    

    这些查询返回对< 指纹 , finger_count >而不是全部 第三页总结 行(或实体)。

    推荐文章