Pergunta

QueryDSL define um OrderSpecifier interface e um exemplo para o que pode ser facilmente obtido para qualquer terreno por telefone asc() ou desc().O QueryDslPredicateExecutor interface do Spring Data JPA tem até um findAll() método que leva OrderSpecifiers como parâmetros.

org.springframework.data.domain.PageRequest no entanto, não sabe nada sobre QueryDSL e ele tem o seu próprio caminho para a definição de consulta ordem de classificação, a saber, org.springframework.data.domain.Sort.Ele pode conter um número de org.springframework.data.domain.Sort.Orders que são muito parecidos com os OrderSpecifiers, exceto que eles não são o tipo de seguro etc.

Então, se eu quiser fazer consulta paginada, que utiliza a classificação, há realmente nenhuma maneira de usar QueryDSL para a definição do que?

Foi útil?

Solução

Ele deve funcionar como isso se você não pode encontrar outra forma de

private Sort sortBy(Path<?> path) {
    return new Sort(Sort.Direction.ASC, path.getMetadata().getExpression().toString());
}

Outras dicas

Eu sei que já faz um tempo e eu não estou certo de que isso era disponível na época do OP, mas agora há um QPageRequest objeto introduzidas, o que permite a classificação através de QueryDSL para ser adicionado ao spring data jpa Consulta DSL...

Aqui está uma maneira muito mais simples para a construção de uma Sort objeto usando QueryDSL:

new QSort(user.manager.firstname.asc())

Em seguida, você pode usá-lo em um PageRequest assim:

new PageRequest(0, 10, new QSort(user.manager.firstname.asc()))

O getExpression() método foi removido, e eu tinha expressões parecidas QPost.post.period.periCode que necessário uma transversal, e sem o nome completo de expressão eu não podia fazer nada sobre isso, então agora eu fiz um método que reúne period.periCode e funciona perfeitamente no QPost.post.

private String resolveOrderPath(Path<?> path) {
    StringBuilder stringBuffer = new StringBuilder(path.getMetadata().getName());
    path = path.getMetadata().getParent();
    while(!path.getMetadata().isRoot()) {
        stringBuffer.insert(0, path.getMetadata().getName() + ".");
        path = path.getMetadata().getParent();
    }
    return stringBuffer.toString();
}

Path<?> path = QPost.post.period.periCode;
String propertyPath = resolveOrderPath(path);
Sort sort = new Sort("asc".equals(sSortDir0) ? Sort.Direction.ASC : Sort.Direction.DESC, propertyPath);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top