OpenJPA: wie ein GROUP BY-Abfrage mit einer Gruppen-Zahl konstruieren
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
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).