어떻게 호출 QueryDSL 쿼리와 함께 봄 JPA?
-
12-12-2019 - |
문제
QueryDSL 정의 OrderSpecifier
인터페이스와 인스턴스에 대한할 수 있는 쉽게 얻을 위한 모든 필드를 호출하여 asc()
나 desc()
.이 QueryDslPredicateExecutor
인터페이스의 Spring Data JPA 도 findAll()
는 방법 OrderSpecifier
s 으로 매개 변수입니다.
org.springframework.data.domain.PageRequest
그러나 응용 프로그램에 대한 원격 액세스를 QueryDSL 그것은 그것의 자신의 방법을 정의하기 위한 쿼리를 정렬 순서,즉 org.springframework.data.domain.Sort
.그것은 포함될 수 있습의 번호 org.springframework.data.domain.Sort.Order
s 있는 많은 좋 OrderSpecifier
s 것을 제외하고,그들은 형식이 안전하지 않 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);