J'ai un mappage un-à-plusieurs entre une entité parente et des entités enfants. Maintenant, j'ai besoin de trouver le nombre d'enfants associés à chaque parent pour une liste de parents. J'essaie de le faire avec HQL mais je ne suis pas sûr de savoir comment je pourrais obtenir la liste des parents. En outre, je ne sais pas comment je peux retourner l'entité elle-même et pas seulement son identité. Ma requête HQL actuelle est:Obtenir le comptage des enfants via HQL
select new map(parent.id as parentId, count(*) as childCount)
from Parent parent left join parent.children children
group by parent.id
mais cela ne renvoie que l'ID et ne filtre pas sur des parents spécifiques.
EDIT Sur la base de la réponse de Pascal J'ai modifié la requête
select new map(parent as parent, count(elements(parent.children)) as childCount)
from Parent parent
group by parent
qui fonctionne, mais il est extrêmement lents: 30 secondes au lieu de 400 ms sur la même base de données.
En effet, c'est horriblement lent. Difficilement acceptable en réalité ... –
Les index peuvent (en accent sur mai) aider à la vitesse, mais l'autre option est de diviser la requête hql en plusieurs parties si vous le pouvez - j'ai trouvé cela utile parfois. Ou vous pouvez faire des requêtes séparées pour chaque élément parent et créer la carte vous-même. Un bon profileur de base de données aidera probablement à l'exploration. – aperkins
La solution que j'ai choisie à la fin est d'abord récupérer tous les parents de la base de données, puis exécutez la requête qui me donne les ID et les comptes parents, puis fusionner les deux en Java. Je dois quand même avoir tous les parents, et fusionner cette liste avec le nombre d'enfants prend moins d'une seconde, ce qui est correct dans cette situation. –