작성
·
2.7K
0
안녕하세요. 강사님
QueryDSL 재미있게 배웠습니다.
정렬기준을 아래와 같이 받았을 때 pageable 파라미터를
이용해서 QueryDSL에 적용하는 방법에 대해서 고민입니다.
정렬기준 입력 형태: URI?sort=field1,asc&sort=field2,desc
방법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을 사용해야할 것으로 보이는데 더 좋은 방법을 아시는지 문의드립니다.
감사합니다.