Olá, pessoal!
Estou utilizando Specification e CriteriaBuilder para construir uma query no Java JPA.
Problema: A cláusula “order by” não esta funcionando !!
A query funciona ,mas não esta ordernada. Ela aparece correta quando utilizo o “spring.jpa.show-sql=true”
Alguem sabe o porquê deste mistério?
public class TesteSpecsPesquisa {
public static Specification<Teste> ordenarPorDescricao() {
return new Specification<Teste>() {
private static final long serialVersionUID = 184948473733L;
@Override
public Predicate toPredicate(Root<Teste> root, CriteriaQuery<?> query,
CriteriaBuilder criteriaBuilder) {
query.orderBy(criteriaBuilder.asc(root.get(Teste_.descricao)));
return query.getRestriction();
}
};
}
public static Specification<Teste> buscarDescricao(String descricao) {
return new Specification<Teste>() {
private static final long serialVersionUID = 184948473733L;
@Override
public Predicate toPredicate(Root<Teste> root, CriteriaQuery<?> query,
CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.like(criteriaBuilder.lower(root.get(Teste_.descricao)),
descricao.toLowerCase() + "%");
}
};
}
}
public List<Teste> listar(ParametrosPesquisaTesteDto parametro) {
Specification<Teste> spec = TesteSpecsPesquisa.ordenarPorDescricao();
if (parametro.getDescricao() != null) {
spec = spec.and(TesteSpecsPesquisa.buscarDescricao(parametro.getDescricao()));
}
List<Teste> resultado = this.TesteRepository.findAll(where(spec));
return resultado;
}