Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

667
Vistas
Especificación Spring JPA con clasificación

Estoy usando Spring JPA.

Para ser más precisos, estoy usando un Repositorio que extiende JpaRepository y JpaSpecificationExecutor porque necesito paginación, filtrado y clasificación.

Ahora tengo la paginación y el filtrado funcionando bien, pero no puedo hacer que la clasificación funcione también.

Observo con cierta decepción que JpaSpecificationExecutor tiene métodos findAll() :

 findAll(Specification, Pageable); findAll(Specification, Sort);

Pero el que necesito:

 findAll(Specification, Pageable, Sort); //or something like this

¡no existe!

Entonces, plan B, incluya la clasificación en la especificación.

Con la ayuda de la Respuesta aceptada a esta pregunta: JpaSpecificationExecutor JOIN + ORDER BY en Especificación , reuní lo siguiente:

 private Specification<MainEntity> matches() { return new Specification<MainEntity>() { public Predicate toPredicate(Root<MainEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) { List<Predicate> predicates = new ArrayList<Predicate>(); //Attempt to sort by Surname, has no effect query.orderBy(cb.asc(root.get("surname"))); //add string filters for (String field : stringFilterMap.keySet()) { String valuePattern = stringFilterMap.get(field); predicates.add(cb.like(root.get(field), "%"+valuePattern+"%")); } //...snip... return cb.and(predicates.toArray(new Predicate[predicates.size()])); } }; }

Donde springFilterMap es un campo de instancia, Map<String,String> cuyas claves son nombres de campo y valores son valores de filtros.

Arriba verá mi intento de ordenar por Apellido, pero esto parece no tener efecto.

Qué estoy haciendo mal; y ¿cómo puedo lograr la clasificación junto con la paginación y el filtrado?

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Use PageRequest , que es una implementación de Pageable , e implementa paginación y clasificación a la vez, como lo desee. Por ejemplo a través de este constructor :

 public PageRequest(int page, int size, Sort sort)

ACTUALIZACIÓN: desde Spring Data JPA 2.0, el constructor anterior está en desuso y debe usar el método de fábrica estático de :

 public static PageRequest of(int page, int size, Sort sort)
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda