해당 포스팅에서는 상품 리뷰 CRUD 테스트 코드를 작성하던 중, 리뷰 게시판의 리뷰 목록을 조회하는 쿼리에서 발생한 오류 해결 과정에 대해 정리하고자 한다.
오류가 발생한 쿼리는 다음과 같다.
@Override
public Page<ReviewListDto> getReviews(ReviewSearchDto reviewSearchDto, Pageable pageable) {
QReview review = QReview.review;
QItemImg itemImg = QItemImg.itemImg;
List<ReviewListDto> content = queryFactory
.select(
new QReviewPageDto(
review.id,
review.title,
review.account.name,
review.regDate,
review.hits,
itemImg.imgUrl,
review.item.id,
review.item.itemNm,
review.item.price,
review.item.discount
)
)
.from(review)
.join(itemImg)
.on(itemImg.item.id.eq(review.item.id))
.where(itemImg.repImgYn.eq("Y"))
.where(like(reviewSearchDto))
.orderBy(review.id.desc())
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.fetch();
JPAQuery<Long> total = queryFactory
.select(review.count())
.from(review)
.join(itemImg)
.on(itemImg.item.id.eq(review.item.id))
.where(itemImg.repImgYn.eq("Y"))
.where(like(reviewSearchDto))
.orderBy(review.id.desc());
return PageableExecutionUtils.getPage(content, pageable, total::fetchOne);
}
디버깅을 통해 확인한 결과, count 쿼리를 실행할 때 오류가 발생했다. join 절부터 지워나가면서 어떤 부분에서 문제가 발생했는지 확인한 결과, orderBy 절을 지우니 쿼리가 정상적으로 작동했다. 이를 통해 count 쿼리에는 정렬 조건이 필요하지 않다는 것을 깨달았고, 그에 따라 이전에 작성한 모든 count 쿼리에서도 정렬 조건을 제거했다.