Pergunta

Em JPQL, quero construir a consulta equivalente a isso:

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

Onde fingerprint é um campo Varchar na tabela page_delta_summary. O que eu tenho é isso:

select d, count(d) as finger_count from PageDeltaSummary d 
where d.deltaHistoryId = :deltaHistoryId and d.type = :pageDeltaType 
GROUP BY d.fingerprint"

Onde PageDeltaSummary é minha entidade. Mas estou recebendo a seguinte exceção:

org.apache.openjpa.persistence.argumentException: Sua consulta na classe "classe com.su3analytics.sitedelta.model.pagedeltaSummary" com filtro "selecione d, contagem (d) de PagedeltaMmary d onde d.deltahistoryid =: deLtaHistory e D. =: Grupo PagedELTAType por D.Fingerprint "é inválido. Sua seleção e as cláusulas devem incluir apenas agregados ou valores que também aparecem na sua cláusula de agrupamento.

A consulta funciona bem se eu remover a contagem (d) como dedo_count ou o grupo por.

Alguma sugestão?

Obrigado

Foi útil?

Solução

Sua consulta SQL original não faz sentido; portanto, você não pode se converter em JPQL.

Eu acho que você quer ter conta de page_delta_summary linhas satisfatórias where condições para cada um fingerprint. Nesse caso, a consulta SQL se parece com a seguinte:

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

e JPQL - assim:

select d.fingerprint, count(d) from PageDeltaSummary d    
where d.deltaHistoryId = :deltaHistoryId and d.type = :pageDeltaType    
GROUP BY d.fingerprint

Essas consultas retornam paresfingerprint, finger_count> em vez de cheio page_delta_summary linhas (ou entidades).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top