¿Cómo implemento la paginación en Hibernate? Los objetos Query
tienen métodos llamados setMaxResults
y setFirstResult
que sin duda son útiles. Pero, ¿dónde puedo obtener el número total de resultados, para poder mostrar el enlace a la última página de resultados e imprimir cosas como los resultados 200 a 250 de xxx?Implementación de la paginación de resultados en hibernación (obtención del número total de filas)
Implementación de la paginación de resultados en hibernación (obtención del número total de filas)
Respuesta
Puede usar Query.setMaxResults (int results) y Query.setFirstResult (int offset).
Edición también: no hay forma de saber cuántos resultados obtendrá. Entonces, primero debe consultar con "seleccionar conteo (*) ...". Un poco feo, en mi humilde opinión.
podría realizar dos consultas: una consulta de tipo de conteo (*), que debería ser barata si no está uniendo demasiadas tablas, y una segunda consulta que tiene los límites establecidos. Entonces sabrá cuántos artículos existen, pero solo captará los que se están viendo.
Personalmente, creo que debe manejar la paginación en el front-end. Sé que esto no es tan eficiente, pero al menos sería menos propenso a errores.
Si usara el recuento (*) ¿qué pasaría si los registros se eliminan de la tabla entre las solicitudes de una página determinada? Muchas cosas podrían salir mal de esta manera.
I no pienses que es crítico. Si los registros se eliminan ** y ** puede navegar por las últimas páginas, recibirá un error más un enlace a los últimos registros existentes. O algo similar. – flybywire
hay problemas con la búsqueda en el frente si la cantidad de datos es prohibitivamente grande, digamos, 1 millón de registros o algo así. – Chii
Debe realizar una consulta por separado para obtener los resultados máximos ... y en el caso donde entre el tiempo A de la primera vez que el cliente emite una solicitud de paginación al tiempo B cuando se emite otra solicitud, si se agregan nuevos registros o algunos registros ahora se ajustan a los criterios, entonces debe consultar nuevamente el máximo para reflejarlos. Yo suelo hacer esto en HQL como esto
Integer count = (Integer) session.createQuery("select count(*) from ....").uniqueResult();
para Criteria
consultas por lo general empujo mis datos en un DTO como esto
ScrollableResults scrollable = criteria.scroll(ScrollMode.SCROLL_INSENSITIVE);
if(scrollable.last()){//returns true if there is a resultset
genericDTO.setTotalCount(scrollable.getRowNumber() + 1);
criteria.setFirstResult(command.getStart())
.setMaxResults(command.getLimit());
genericDTO.setLineItems(Collections.unmodifiableList(criteria.list()));
}
scrollable.close();
return genericDTO;
Puede setMaxResults sólo al número máximo de filas que desea obtener. No hay daño al establecer este valor mayor que el número de filas reales disponibles. El problema de las otras soluciones es que suponen que el orden de los registros sigue siendo el mismo en cada repetición de la consulta, y no hay cambios entre los comandos.
Para evitar eso, si realmente desea desplazarse por los resultados, lo mejor es utilizar los resultados de desplazamiento. No arroje este objeto entre paginación, pero utilícelo para mantener los registros en el mismo orden. Para saber la cantidad de registros de ScrollableResults, puede simplemente pasar a la última posición() y luego obtener el número de fila. Recuerde agregar 1 a este valor, ya que los números de fila comienzan a contar en 0.
- 1. Paginación de Tridion: obtención del número total de resultados
- 2. NHibernate 3 paginación y determinación del número total de filas
- 3. Recuento total de filas para paginación usando criterios JPA API
- 4. (Oracle) ¿Cómo obtener el número total de resultados al usar una consulta de paginación?
- 5. Encontrar el número total de resultados en la consulta mySQL con desplazamiento + límite
- 6. Obtención de resultados únicos en Hibernate
- 7. Cómo obtener el número total de resultados posibles en Lucene
- 8. obtiene el número total de filas al utilizar LÍMITE
- 9. Obtener el número total de registros cuando se hace la paginación
- 10. MySQL - cuenta el número total de filas en php
- 11. Cómo obtener el recuento total después de la paginación Kaminari
- 12. Vimdiff: visualización del número total de cambios
- 13. Hibernate - resultados distintos con paginación
- 14. Es esto posible obtener el número total de filas cuenta con el límite de desplazamiento
- 15. ¿Número total de publicaciones?
- 16. ¿Forma más rápida de conocer el número total de filas en la base de datos MySQL?
- 17. recuento total de filas en iReport
- 18. grails paginación de los resultados de búsqueda
- 19. pérdida de hibernación de precisión en los resultados cuando se mapea un número (22,21) a BigDecimal
- 20. recuento (*) en criterios de hibernación?
- 21. .NET Framework 4 tamaño total de implementación de la aplicación
- 22. Contar número total de XmlNodes en C#
- 23. Contar filas totales de gridview con paginación
- 24. (Oracle) la forma de agrupar filas para paginación
- 25. ElasticSearch resultados duplicados con paginación
- 26. La implementación del cálculo del número de días entre 2 fechas
- 27. ¿Cómo contar el número de filas en un jqGrid?
- 28. límite de número de página de la paginación
- 29. Obtención de datos para la gráfica del histograma
- 30. Obtenga el número de filas en la tabla usando SQLAlchemy
Estoy de acuerdo con las otras dos respuestas. Además, solicito prácticas de implementación en esta publicación: http://stackoverflow.com/questions/1600440/java-coding-best-practices-for-reusing-part-of-a-query-to-count – KLE