Domanda

In JPQL voglio costruire la query equivalente a questo:

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

dove fingerprint è un campo varchar nella tabella page_delta_summary. Quello che ho è questa:

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

dove PageDeltaSummary è il mio soggetto. Ma sto ottenendo la seguente eccezione:

org.apache.openjpa.persistence.ArgumentException: Domande del tipo "classe com.su3analytics.sitedelta.model.PageDeltaSummary" con filtro "selezionare d, count (d) da PageDeltaSummary d dove d.deltaHistoryId =: deltaHistoryId e d.type =: pageDeltaType GROUP BY d.fingerprint" non è valido. I tuoi clausole di selezionare e avendo devono includere solo aggregati o valori che appaiono anche nel vostro clausola di raggruppamento.

La query funziona bene se rimuovere o count (d) come finger_count o GROUP BY.

Qualche suggerimento?

Grazie

È stato utile?

Soluzione

La vostra query originale SQL non ha senso, quindi, non è possibile convertire in in JPQL.

Credo che si desidera ottenere conteggio delle righe page_delta_summary che soddisfano le condizioni where per ogni fingerprint. Se è così, gli sguardi di query SQL come questo:

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

e JPQL - in questo modo:

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

Queste query restituiscono coppie <fingerprint, finger_count> al posto di righe page_delta_summary completi (o enti).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top