Toy 프로젝트에서 Querydsl을 사용하여 Item 엔티티를 price별 내림차순을 구현하고싶어서 .orderBy()를 사용했는데 인자로 Sort를 받지않고 OrderSpecifier를 받는다.
3가지 필드가 있다.
Order, target, nullHandling
Order 와 NullHanding은 Enum
타입이였고, target은 Expression<T>
타입 이였다.
OrderSpecifier를 생성해서 리스트에담아 반환해주는 getOrderSpecifier 메서드를 만들었다.
인자로 Sort를 받는 이유는 pageable.getSort()로 정렬조건을 받아올수 있기때문이다.
변수 direction는 인자로 받은 sort에서 정렬조건을 찾아 넣어주고
orderByExpression의 타입인 PathBuilder
는 동적으로 경로를 생성해준다.
orderBy()부분을 아래와 같이 변경하고, 테스트 코드 작성!
price 내림차순으로 잘 정렬 된것을 확인 할 수 있다.