Tengo una asignación de uno a varios entre una entidad principal y entidades secundarias. Ahora necesito encontrar la cantidad de hijos asociados con cada padre para una lista de padres. Estoy tratando de hacer esto con HQL, pero no estoy seguro de cómo puedo obtener la lista de padres allí. Además, no sé cómo puedo devolver la entidad en sí y no solo su ID. Mi consulta HQL actual es:Obtener el recuento de niños a través de HQL
select new map(parent.id as parentId, count(*) as childCount)
from Parent parent left join parent.children children
group by parent.id
pero esto solo devuelve la ID y no filtra en padres específicos.
EDITAR Sobre la base de la respuesta de Pascal he modificado la consulta a
select new map(parent as parent, count(elements(parent.children)) as childCount)
from Parent parent
group by parent
Eso funciona, pero es prohibitivamente lento: 30 segundos en lugar de 400 ms en la misma base de datos.
De hecho, eso es terriblemente lento. Apenas aceptablemente aceptable ... –
Los índices pueden (énfasis en mayo) ayudar con la velocidad, pero la otra opción es dividir la consulta de hql en partes si es posible - He encontrado que a veces ayuda. O puede hacer consultas separadas para cada elemento padre y crear el mapa usted mismo. Un buen perfilador de base de datos probablemente ayudará con la exploración. – aperkins
La solución que elegí al final es recuperar primero todos los padres de la base de datos, luego ejecutar la consulta que me proporciona los ID y los recuentos principales y luego combinarlos en Java. De todos modos, tengo que reunir a todos los padres y fusionar esa lista con el recuento de niños lleva menos de un segundo, lo que está bien en esta situación. –