문제

QueryDSL 정의 OrderSpecifier 인터페이스와 인스턴스에 대한할 수 있는 쉽게 얻을 위한 모든 필드를 호출하여 asc()desc().이 QueryDslPredicateExecutor 인터페이스의 Spring Data JPA 도 findAll() 는 방법 OrderSpecifiers 으로 매개 변수입니다.

org.springframework.data.domain.PageRequest 그러나 응용 프로그램에 대한 원격 액세스를 QueryDSL 그것은 그것의 자신의 방법을 정의하기 위한 쿼리를 정렬 순서,즉 org.springframework.data.domain.Sort.그것은 포함될 수 있습의 번호 org.springframework.data.domain.Sort.Orders 있는 많은 좋 OrderSpecifiers 것을 제외하고,그들은 형식이 안전하지 않 etc.

그래서,해 만들고 싶은 페이지 조회를 사용하여 정렬,정말 아무 방법을 사용하여 QueryDSL 에 대한 정의는?

도움이 되었습니까?

해결책

다른 방법을 찾을 수 없으면 이렇게 작동해야합니다

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

다른 팁

나는 그것이 잠시 였는지 알고 있고, OP의 시점에서 이것이 이용 가능하지만 이제는 qpageRequest Question Qu Query DSL에 QueryDSL을 추가 할 수있는 QueryDSL을 통해 소지 할 수있는 개체 ...

여기에는 훨씬 더 간단한 방법을 구성하는 Sort 를 사용하여 개체 QueryDSL:

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

다음에 사용할 수 있습니다 PageRequest 그래서 다음과 같:

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

getExpression() 방법 제거되었다,그리고 나는 표현이 가깝다 QPost.post.period.periCode 탐색,그리고 전체 이름의 표현이 나는 아무것도 할 수 없습니다,그래서 그것에 대해 이제 내가 만들 수집하는 방법 period.periCode 에서 완벽하게 작동한 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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top