Pregunta

QueryDSL define un OrderSpecifier interfaz y un ejemplo de que se puede obtener fácilmente por cualquier campo llamando asc() o desc().El QueryDslPredicateExecutor interfaz de Spring Data JPA tiene incluso un findAll() el método que se lleva a OrderSpecifiers como parámetros.

org.springframework.data.domain.PageRequest sin embargo no sabe nada acerca de QueryDSL y tiene su propio camino para la definición de la consulta en orden, es decir, org.springframework.data.domain.Sort.Puede contener un número de org.springframework.data.domain.Sort.Orders que se parece mucho a la de OrderSpecifiers, excepto que ellos no son el tipo de seguridad.

Así que, si quiero hacer paginado de consulta que utiliza la clasificación, hay realmente ninguna manera de utilizar QueryDSL para definir eso?

¿Fue útil?

Solución

Se debe trabajar como esto si usted no puede encontrar otra manera

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

Otros consejos

Sé que ha pasado un tiempo y no estoy seguro de que esto estaba disponible en el momento de la OP, pero ahora hay una QPageRequest objeto introducido, que permite ordenar a través de QueryDSL para ser añadido a la primavera de datos jpa Consulta DSL...

Aquí está una manera mucho más sencilla de construir un Sort objeto utilizando QueryDSL:

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

A continuación, se puede utilizar en un PageRequest así:

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

El getExpression() el método ha sido eliminado, y tuve expresiones similar a QPost.post.period.periCode que necesitaba un recorrido, y sin el nombre completo de la expresión no podía hacer nada al respecto, así que ahora me he hecho un método que reúne period.periCode y funciona a la perfección en 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top