Frage

In JPQL Ich mag die entsprechende Abfrage auf diese erstellen:

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

wo fingerprint ist ein varchar Feld in der Tabelle page_delta_summary. Was ich habe, ist dies:

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

wo PageDeltaSummary ist meine Einheit. Aber ich erhalte die folgende Ausnahme:

org.apache.openjpa.persistence.ArgumentException: Ihre Anfrage vom Typ "Klasse com.su3analytics.sitedelta.model.PageDeltaSummary" mit Filter „wählen d, count (d) von PageDeltaSummary d wo d.deltaHistoryId =: deltaHistoryId und d.type =: pageDeltaType GROUP BY d.fingerprint“ist ungültig. Ihre Auswahl und having-Klauseln muss enthalten nur Aggregate oder Werte, die auch in Ihrer Gruppierung Klausel erscheinen.

Die Abfrage funktioniert gut, wenn ich entweder count (d) als finger_count oder die GROUP BY entfernen.

Irgendwelche Vorschläge?

Danke

War es hilfreich?

Lösung

Ihre ursprüngliche SQL-Abfrage ist nicht sinnvoll, deshalb kann man nicht in konvertiert in JPQL.

Ich denke, man Anzahl der page_delta_summary Reihen erhalten möchten erfüllen where Bedingungen für jeden fingerprint. Wenn ja, werden die SQL-Abfrage sieht wie folgt aus:

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

und JPQL - wie folgt aus:

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

Diese Abfragen geben Paare <fingerprint, finger_count> anstelle von Voll page_delta_summary Zeilen (oder Einheiten).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top