인프런 커뮤니티 질문&답변

배워야산다님의 프로필 이미지

작성한 질문수

실전! Querydsl

Querydsl 지원 클래스 직접 만들기

Spring Sort를 QueryDSL 변환 적용하는 방법 문의

21.02.15 00:10 작성

·

2.6K

0

안녕하세요. 강사님

QueryDSL 재미있게 배웠습니다.

정렬기준을 아래와 같이 받았을 때 pageable 파라미터를 

이용해서 QueryDSL에 적용하는 방법에 대해서 고민입니다.

정렬기준 입력 형태: URI?sort=field1,asc&sort=field2,desc

org.springframework.data.domain.Sort

방법1. pageable 값을 얻어와 직접 queryDSL에 OrderSpecifier로 지정

if (pageable != null) {

    query.offset(pageable.getOffset());

    query.limit(pageable.getPageSize());

    for (Sort.Order o : pageable.getSort()) {

        PathBuilder<Object> orderByExpression = new PathBuilder<Object>(Object.class, "object");

        query.orderBy(new OrderSpecifier(o.isAscending() ? com.mysema.query.types.Order.ASC

                : com.mysema.query.types.Order.DESC, orderByExpression.get(o.getProperty())));

    }

}

방법2. applyPagination() 함수로 매핑

getQuerydsl().applyPagination(pageable, jPQLQuery);

결과적으로 방법2가 더 깔끔해 보이는데

원본 엔티티와 DTO객체가 달라서 org.hibernate.hql.internal.ast.QuerySyntaxException이 발생하는 이슈가 있습니다.

현재까지 결론은 방법1을 사용해야할 것으로 보이는데 더 좋은 방법을 아시는지 문의드립니다.

감사합니다.

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

2021. 02. 15. 23:03

안녕하세요. 배워야산다님

1번을 사용해야 할 듯 합니다.

혹시 더 좋은 방법을 아시는 분은 답변 부탁드립니다.

감사합니다.