Ho una mappatura uno-a-molti tra un'entità padre e entità figlio. Ora ho bisogno di trovare il numero di bambini associati a ciascun genitore per un elenco di genitori. Sto cercando di farlo con HQL, ma non sono sicuro di come sia possibile ottenere l'elenco dei genitori. Inoltre, non so come posso restituire l'entità stessa e non solo il suo ID. La mia query HQL corrente è:Ottenere i conteggi dei figli tramite HQL
select new map(parent.id as parentId, count(*) as childCount)
from Parent parent left join parent.children children
group by parent.id
ma questo restituisce solo l'ID e non filtra su genitori specifici.
EDIT in base alla risposta di Pascal ho modificato la query per
select new map(parent as parent, count(elements(parent.children)) as childCount)
from Parent parent
group by parent
che fa il lavoro, ma è proibitivo lenta: 30 secondi invece di 400 ms sulla stessa base di dati.
In effetti, questo è terribilmente lento. Difficilmente accettabile in realtà ... –
Gli indici possono (enfatizza maggio) aiutare con la velocità, ma l'altra opzione è quella di scomporre la query hql in parti se è possibile - ho trovato che a volte aiutare. O potresti fare query separate per ogni elemento genitore e creare la mappa da solo. Un buon profiler del database probabilmente aiuterà con l'esplorazione. – aperkins
La soluzione che ho scelto alla fine è quella di recuperare prima tutti i genitori dal database, quindi eseguire la query che mi dà ID padre e conteggi e quindi unire i due in Java. Devo comunque avere tutti i genitori e unire quella lista con il numero dei bambini richiede meno di un secondo, il che va bene in questa situazione. –