Yo uso PagingAndSortingRepository y findAll (paginable paginable) método para paginación de mis datos. Creo que no hay forma de proporcionar ninguna condición. Por ejemplo, en algún momento quiero seleccionar las direcciones de selección y ubicación donde city = NY. ¿Hay alguna manera de proporcionar la condición y la paginación simultáneamente?¿Cómo combinar la paginación con una consulta de criterios en Spring Data JPA?
Respuesta
El PagingAndSortingRepository
sólo se suma a los métodos muy básicos CRUD en modo de paginación. Como se describe en reference documentation, simplemente puede agregar un parámetro Pageable
a cualquier método de consulta que defina para lograr la paginación de esta consulta.
interface CustomerRepository implements Repository<Customer, Long> {
Page<Customer> findByLastname(String lastname, Pageable pageable);
List<Customer> findByFirstname(String firstname, Pageable pageable);
}
El primer método devolverá un Page
que contiene los metadatos página como elementos totales disponibles etc. Para calcular estos datos se activará una consulta de recuento adicional para la consulta derivada. El segundo método de consulta devuelve el conjunto de resultados sin formato sin que se ejecute la consulta de recuento.
Para paginación necesita 2 métodos como getCount (paginable paginable) y findAll (paginable paginable)
Utilizando esta funcionalidad en hibernación, sin embargo, es trivial. Si tiene cualquier consulta HQL puede simplemente hacer esto:
public Long getCount(Pageable pageable) {
Query q = session.createQuery("Select count(t) From TableClass t where t.city = 'NY'");
Long cnt = (Long) q.uniqueResult();
return cnt;
}
public List<TableClass> findAll(Pageable pageable) {
Query q = session.createQuery("From TableClass t where t.city = 'NY'");
q.setFirstResult(start);
q.setMaxResults(length);
List<TableClass> tableClasslist = q.list();
return tableClasslist;
}
Del mismo modo, si usted tiene una consulta Criteria, que es efectivamente lo mismo:
public Long getCount(Pageable pageable) {
Criteria c = session.createCriteria(TableClass.class);
c.setProjection(Projections.rowCount());
Long cnt = (Long) c.uniqueResult();
return cnt;
}
public List<TableClass> findAll(Pageable pageable) {
Criteria c = session.createCriteria(TableClass.class);
c.setParameter("city","NY");
c.setFirstResult(start);
c.setMaxResults(length);
List<TableClass> tableClasslist = c.list();
return tableClasslist ;
}
Gracias por la ayuda. Busqué la solución JPA, pero DataNucleus eliminó JPA de las etiquetas de la pregunta. Usé la etiqueta de hibernación para expresar que Hibernate es mi proveedor de persistencia. – Mariusz
- 1. Spring JPA Data "O" consulta
- 2. ¿Cómo utilizar la auditoría en JPA/Spring-Data JPA?
- 3. ¿Cómo escribir esta consulta usando la consulta de Criterios JPA?
- 4. Spring Data JPA no válido page.sort Parámetros
- 5. Recuento total de filas para paginación usando criterios JPA API
- 6. ¿Cómo actualizo una entidad usando spring-data-jpa?
- 7. Comprensión de Spring Data JPA @NoRepositoryBean interfaz
- 8. usando CountDistinct en una consulta JPA los criterios del API
- 9. Necesito ayuda para crear la consulta de criterios JPA
- 10. spring-data-mongo - parámetros de consulta opcionales?
- 11. API de criterios JPA con múltiples parámetros
- 12. Cómo agregar un método personalizado a Spring Data JPA
- 13. JPA - Criterios de consulta - Búsqueda de enteros usando "como"
- 14. Criterios JPA Consulte distinta
- 15. subconsulta en la cláusula select con API JPA Criterios
- 16. Tutorial de Criterios JPA
- 17. Consulta de criterios JPA Path.get left join es posible
- 18. ¿Cómo determinar correctamente si una cláusula de consulta de criterios JPA "existente" devuelve verdadero o falso?
- 19. ¿Cómo integrar la búsqueda de texto completo en Spring-data-jpa?
- 20. Consultas complejas con el constructor de criterios de JPA
- 21. ¿Cómo combinar dos tablas en una consulta?
- 22. Cómo optimizar una consulta JPA
- 23. API de criterios JPA 2 +: definición de una subconsulta
- 24. Combinar consultas en una consulta
- 25. paginación con los Criterios de Hibernate y DISTINCT_ROOT_ENTITY
- 26. ¿Cómo agregar QueryHints a los métodos de Spring Data JPA predeterminados?
- 27. ¿Cómo se configura JPA con Spring 3?
- 28. jpa lazy fetch entidades sobre múltiples niveles con criterios api
- 29. JPA los criterios del API: propiedades de la consulta de la subclase
- 30. ¿Cómo obtener CURDATE()/NOW() en una consulta con nombre JPA?
Hola @Olivier con Pageagle, no veo dónde especificar el 'offset',' PageRequest' solo acepta 'page' y' size'. Realmente no veo por qué tengo que hacer 'page * size' para obtener mi' offset'. ¿Hay alguna forma de usar 'offset' en lugar de' page'? –
El motivo 'PageRequest' expone' page' y 'size' ya que solo' offset' no es suficiente ya que aún necesita el 'size'. El concepto de paginación generalmente implica una vista centrada en la página en los datos, que es lo que expresamos aquí. Pero nada le impide crear su propia implementación de 'pageable' que funciona con compensaciones y tamaños. –
¿Cómo podemos usar Pagivation con Query API? –