Question

Dans JPQL Je veux construire la requête équivalente à ceci:

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

fingerprint est un champ varchar dans le tableau page_delta_summary. Ce que j'est le suivant:

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

PageDeltaSummary est mon entité. Mais je reçois l'exception suivante:

org.apache.openjpa.persistence.ArgumentException: Votre requête du type "com.su3analytics.sitedelta.model.PageDeltaSummary de classe" avec filtre « select d, le nombre (d) de PageDeltaSummary d où d.deltaHistoryId =: deltaHistoryId et d.type =: pageDeltaType GROUP BY d.fingerprint » est invalide. Votre sélection et ayant des clauses doivent inclure uniquement les agrégats ou les valeurs qui apparaissent également dans votre clause de regroupement.

La requête fonctionne bien si je retire soit le nombre (d) en tant que finger_count ou le GROUP BY.

Toutes les suggestions?

Merci

Était-ce utile?

La solution

Votre requête SQL d'origine n'a pas de sens, vous ne pouvez donc convertir en en JPQL.

Je suppose que vous voulez obtenir le nombre de lignes de page_delta_summary satisfaisant les conditions de where pour chaque fingerprint. Si oui, l'aspect de la requête SQL comme ceci:

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

et JPQL - comme ceci:

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

Ces requêtes renvoient paires <fingerprint, finger_count> au lieu de lignes complètes de page_delta_summary (ou entités).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top