문제 1: QUser, QOrder, QReview 등 QueryDSL 메타 클래스가 없는 심볼로 표시
원인
빌드를 클린 후 빌드하지 않았기 때문에 이와같은 문제 발생
해결 과정
빌드하기전 클린 작업을 진행함
문제 2: ReviewRepository와 QueryDSL기반 ReviewQueryRepository간의 통합
원인
JpaRepository와 QueryDSL 인터페이스(ReviewQueryRepository)를 동시에 구현하면서 일부 메서드가 중복되거나 불필요한 기본 메서드가 존재
해결과정
1.중복 메서드 제거
ReviewRepository에사 불필여한 기본 메서드(findByShopId)제거:
public interface ReviewRepository extends JpaRepository<Review, Integer>, ReviewQueryRepository {
boolean existsByOrder(Order order);
}
2.QueryDSL 기반 메서드 구현
ReviewQueryRepositoryImpl에 findAllByShopId 및 findAllByUserId 구현:
@Override
public Page<Review> findAllByShopId(int shopId, Pageable pageable) {
JPQLQuery<Review> query = queryFactory
.selectFrom(review)
.join(review.order, order).fetchJoin()
.join(order.user, user).fetchJoin()
.join(shop).on(user.id.eq(shop.user.id))
.where(shop.id.eq(shopId));
long total = query.fetchCount();
List<Review> content = query
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.fetch();
return new PageImpl<>(content, pageable, total);
}
결과 ReviewRepository와 QueryDSL기반 메서드가 통합되어 서비스 계층에서 문제없이 호출 가능.
문제 3: reviewRepository에서 shopId 필드를 찾을 수 없음
원인:
Review 엔티티에 shopId필드가 없으며, Order를 통해 간접적으로 Shop과 연결되어 있었음.
해결 과정:
ReviewRepository에서 잘못된 메서드 삭제
결과
QueryDSL 기반으로 shopId를 통해 Review데이터를 정상적으로 조회 가능
문제 4: HEAD~n이 유효하지 않아 git rebase -i 실행 실패
원인:
HEAD~n에서 n을 올바르게 지정하지 않음
해결 과정:
HEAD~n의 숫자(n)를 정확히 지정(예: HEAD~5)
결과:
git rebase -i 명령어가 정상적으로 동작하며 커밋 메시지 및 히스토리 수정 가능.
문제 5: Review 엔티티에서 shopId로 데이터를 바로 조회 불가
원인:
Review는 Order를 통해 간접적으로 Shop과 연결되어 있으며, 이를 바로 접근하기 어려움.
해결 과정:
QueryDSL을 사용하여 shopId를 기준으로 리뷰 데이터를 조회.
Order를 통해 shop 데이터를 연결하는 쿼리 작성.
결과:
QueryDSL로 shopId를 기준으로 리뷰 데이터를 효율적으로 조회 가능.