La pregunta implementing-result-paging-in-hibernate-getting-total-number-of-rows desencadenar otra pregunta para mí, de cierta preocupación aplicación:Java codificación de las mejores prácticas para la reutilización de parte de una consulta para contar
Ahora se sabe que tiene que volver a utilizar parte de la consulta HQL hacer el conteo, ¿cómo reutilizar de manera eficiente?
Las diferencias entre las dos consultas HQL son:
- la selección es
count(?)
, en lugar del POJO o propiedad (o lista de) - las recuperaciones no debería ocurrir, por lo que algunas tablas no deben ser unido a
- la
order by
debe desaparecer
¿hay otras diferencias?
¿Tiene mejores prácticas de codificación para lograr esta reutilización de manera eficiente (preocupaciones: esfuerzo, claridad, rendimiento)?
Ejemplo para una simple consulta HQL:
select a from A a join fetch a.b b where a.id=66 order by a.name
select count(a.id) from A a where a.id=66
ACTUALIZADO
Recibí respuestas en:
- usando Criterios (pero nosotros usamos HQL en su mayoría)
- la manipulación de la cadena consulta (pero todo el mundo está de acuerdo en que parece complicado y no muy seguro)
- envolver la consulta, basándose en la optimización de bases de datos (pero hay una sensación de que esto no es seguro)
Esperaba que alguien diera opciones a lo largo de otra ruta, más relacionada con la concatenación de cadenas.
¿Podríamos construir ambas consultas HQL usando las partes comunes?
+1 Gracias por estas precisiones sobre la manipulación de la consulta. Gracias también por la excelente precisión que ** una consulta de recuento debe ejecutarse solo después de una primera consulta **. – KLE
He actualizado mi pregunta, ¿harías otra respuesta relacionada con la parte nueva? Me gustaron muchas de tus otras publicaciones, y eres un experto en Java :-) ... – KLE
Gracias :-) He actualizado mi respuesta anterior. – ChssPly76