오류 내용
리뷰를 포함한 Product List Repository를 테스트 하는 중 아래와 같은 오류가 발생했다.
@Override
public PageResponseDTO<ProductListDTO> list(PageRequestDTO requestDTO) {
QProduct product = QProduct.product;
QProductImage productImage = QProductImage.productImage;
QProductReview review = QProductReview.productReview;
JPQLQuery<Product> query = from(product);
query.leftJoin(product.images, productImage);
query.leftJoin(review).on(review.product.eq(product));
query.where(productImage.ord.eq(0));
query.where(product.delFlag.eq(Boolean.FALSE));
int pageNum = requestDTO.getPage() <= 0 ? 0 : requestDTO.getPage() - 1;
Pageable pageable = PageRequest.of(pageNum, requestDTO.getSize(), Sort.by("pno").descending());
this.getQuerydsl().applyPagination(pageable, query);
JPQLQuery<ProductListDTO> dtoQuery = query.select(Projections.bean(ProductListDTO.class,
product.pno, product.pname, product.price, productImage.fname, productImage.fname.min().as("fname"),
review.score.avg().as("reviewAvg"), review.score.count().as("reviewCnt")));
List<ProductListDTO> list = dtoQuery.fetch();
long totalCount = dtoQuery.fetchCount();
return new PageResponseDTO<>(list, totalCount, requestDTO);
}
오류 원인 및 해결
구글링을 해보니 SQL 질의에서 group by 절 없이 집계 함수를 사용할 때 발생하는 오류라고 한다. ProductSearchImpl의 list에 group by절을 추가해 해결했다. 집계 함수를 사용할 땐 반드시 group by를 사용해야 한다는 점을 기억하자.
query.groupBy(product);
'오류 일지' 카테고리의 다른 글
[H2DB] expected 'identifier' (0) | 2023.10.27 |
---|---|
[React] Cannot destructure property 'basename' of 'react__WEBPACK_IMPORTED_MODULE_0__.useContext(...)' as it is null. (0) | 2023.10.19 |
Type definition error (0) | 2023.09.04 |
[페이징] 페이지 버튼 안 먹힘 (0) | 2023.09.03 |
[페이징] Page index must not be less than zero (0) | 2023.09.03 |