Pregunta

En JPQL Quiero construir la consulta equivalente a esto:

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

donde fingerprint es un campo varchar en page_delta_summary mesa. Lo que tengo es la siguiente:

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

donde PageDeltaSummary es mi entidad. Pero me estoy haciendo la siguiente excepción:

org.apache.openjpa.persistence.ArgumentException: Su consulta del tipo "com.su3analytics.sitedelta.model.PageDeltaSummary clase" con filtro "seleccione d, count (d) de PageDeltaSummary d = donde d.deltaHistoryId: deltaHistoryId y d.type =: pageDeltaType GROUP BY d.fingerprint" no es válido. Sus cláusulas SELECT y que tienen solamente deben incluir agregados o valores que también aparecen en la cláusula de agrupación.

La consulta funciona bien si se quita o bien recuento (d) como finger_count o GROUP BY.

¿Alguna sugerencia?

Gracias

¿Fue útil?

Solución

Su consulta SQL original, no tiene sentido, por lo tanto, no se puede convertir en en JPQL.

supongo que desea obtener el recuento de filas que satisfacen las condiciones page_delta_summary where para cada fingerprint. Si es así, las miradas de consulta SQL como la siguiente:

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

y JPQL - como esto:

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

Estas consultas devuelven pares <fingerprint, finger_count> en lugar de filas page_delta_summary completos (o entidades).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top