orden de clasificación en función de búsqueda

Peter Penzov:

Yo uso este código para obtener los registros de base de datos utilizando la APP y primavera:

return transactionService.findAll(page, size)


        public Page<PaymentTransactions> findAll(int page, int size) {
        return dao.findAll(PageRequest.of(page,size, new Sort(Sort.Direction.DESC, "createdAt")));
        }

Me gustaría poner en práctica la misma clasificación para este código:

return transactionService.getAllBySpecification(specification, pageable)

      @Override
      public Page<PaymentTransactions> getAllBySpecification(final Specification<PaymentTransactions> specification, final Pageable pageable) {
          return dao.findAll(specification, pageable);
      }

¿Sabe usted cómo puedo implementar dirección de clasificación por la columna usando la especificación. Algo como esto:

return dao.findAll(specification, PageRequest.of(page,size, new Sort(Sort.Direction.DESC, "createdAt")));

additionnal pregunta:

¿Puedo configurar objeto pagable con la dirección de ordenación? Algo como esto:

      @Override
      public Page<PaymentTransactions> getAllBySpecification(final Specification<PaymentTransactions> specification, final Pageable pageable) {
          return dao.findAll(specification, PageRequest.of(pageable, new Sort(Sort.Direction.DESC, "createdAt")));
      }
Marco R. :

Usted no necesita ninguna otra cosa que no sea JpaSpecificationExecutor. Primavera utilizará esta interfaz para crear automáticamente el:

Page<T> findAll(@Nullable Specification<T> spec, Pageable pageable)

método que parece estar buscando. Por lo tanto, no está claro cuál es el problema, tal vez usted está importando las clases equivocadas? O si simplemente desea generar PageRequestpara el getAllBySpecificationuso pagey sizepuede tener algo como esto:

    public Page<Entity> getAllBySpecification(
            Specification<Entity> specification, 
            int page, int size) {

        return dao.findAll(specification, createMyPageRequest(page, size));
    }

    private PageRequest createMyPageRequest(int page, int size) {
        return PageRequest.of(page, size, new Sort(Sort.Direction.DESC, "createdAt"));
    }

En cualquier caso, si necesita un ejemplo compilación completa de estas API ...

¿Me puede mostrar algún ejemplo de código por favor?

... aquí está:

import org.springframework.data.domain.*;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

public class SortFunctionality {
    private Dao dao;

    public Page<Entity> findAll(int page, int size) {
        return dao.findAll(createMyPageRequest(page, size));
    }

    public Page<Entity> getAllBySpecification(
            Specification<Entity> specification, 
            int page, int size) {

        return dao.findAll(specification, createMyPageRequest(page, size));
    }

    public Page<Entity> getAllBySpecification(
            Specification<Entity> specification, 
            Pageable pageable) {

        PageRequest pageRequest = createMyPageRequest(
                pageable.getPageNumber(), 
                pageable.getPageSize());

        return dao.findAll(specification, pageRequest);
    }   

    private PageRequest createMyPageRequest(int page, int size) {
        return PageRequest.of(page, size, new Sort(Sort.Direction.DESC, "createdAt"));
    }

    static interface Dao extends 
        JpaRepository<Entity, Integer>, JpaSpecificationExecutor<Entity> {}

    static class Entity {}
}

Pregunta adicional de edición:

Sí se puede lograr esto mediante la extracción del pageNumbery la pageSizedel Pageableargumento y utilizarlos para crear su encargo PageRequest( PageRequestcon criterios de clasificación codificado) con la createMyPageRequestutilidad que he incluido en el código de demostración. Por último, puede utilizar esa PageRequestinvocar al findAllmétodo como de costumbre:

    public Page<Entity> getAllBySpecification(
            Specification<Entity> specification, 
            Pageable pageable) {

        PageRequest pageRequest = createMyPageRequest(
                pageable.getPageNumber(), 
                pageable.getPageSize());

        return dao.findAll(specification, pageRequest);
    }   

He actualizado la demo completa anterior para reflejar esta nueva adición también. También es un poco rediseñado, así que si pega este nuevo método sobre una copia de la versión anterior de demostración que tendrá errores.

código completo en GitHub

Espero que esto ayude.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=173149&siteId=1
Recomendado
Clasificación