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

hk.moon님의 프로필 이미지
hk.moon

작성한 질문수

코드로 배우는 React with 스프링부트 API서버

Querydsl에서 @ElementCollection 처리

ProductSearchImpl 관련 질문드립니다.

작성

·

40

0

@Override
public PageResponseDTO<ProductDTO> searchList(PageRequestDTO pageRequestDTO) {

    log.info("----------------------searchList-------------------------");


    Pageable pageable = PageRequest.of(
            pageRequestDTO.getPage() -1,
            pageRequestDTO.getSize(),
            Sort.by("pno").descending());

    QProduct product = QProduct.product;
    QProductImage productImage = QProductImage.productImage;
    // from 절
    JPQLQuery<Product> query = from(product);
    // join
    // @ElementCollection을 join 할때는 아래와 같이 사용해야합니다.
    // product.imageList를  productImage로 사용하겠다.
    query.leftJoin(product.imageList, productImage);

    query.where(productImage.ord.eq(0));

    Objects.requireNonNull(getQuerydsl()).applyPagination(pageable,query);

    List<Tuple> productList = query.select(product,productImage).fetch(); // 쿼리를 실행시키기 위함.

    long count = query.fetchCount();

    log.info("=======================");
    log.info(productList);

    return null;
}
  1. 이 코드에서 return 값을 넘기고 싶어서 수정하는데 어떻게 해야 값이 넘어가는지를 잘 모르겠습니다...
    TodoSearchImpl에서는 new PageImpl<>() 사용하셔서 넘기셨는데 여기서는 어떻게 처리해야 될까요??

    2. ProductServiceImpl의 getList() 메서드와 동일한 역할인거같은데, ProductSearchImpl 에서는 querydsl을 사용하셔서 보여주신거고 ProductServiceImpl에서는 jpa를 사용하는 방법을 보여주신게 맞는지 궁금합니다!

답변 2

1

구멍가게코딩단님의 프로필 이미지
구멍가게코딩단
지식공유자

 

List<Tuple>에 있는 내용을 List<ProductDTO> 로 변환하시는 작업이 필요합니다.

PageRequestDTO는 파라미터에 있는 것을 그대로 사용하시면 되고..

이를 활용해서 아래와 같은 코드로 리턴하실 수 있습니다.

PageResponseDTO<ProductDTO> responseDTO = PageResponseDTO.<ProductDTO>withAll()

.dtoList(dtoList)

.pageRequestDTO(pageRequestDTO)

.totalCount(totalCount)

.build();

return responseDTO;

 


2번은 말씀하신 내용이 맞습니다.

hk.moon님의 프로필 이미지
hk.moon
질문자

감사합니다 선생님!!

0

안녕하세요, 인프런 AI 인턴입니다.

질문하신 내용과 유사한 문제를 해결한 기존의 답변을 찾았습니다. 예시 코드와 함께 설명된 답변 링크가 도움이 될 것 같습니다.

  1. 검색 결과 반환 값 처리에 대해서는 다음 질문에서 유사한 상황을 해결하는 과정이 설명되어 있습니다. 해당 답변에서는 PageResponseDTO 를 생성하고 반환하는 방법에 대해 안내하고 있습니다. 구체적으로는 결과 목록과 페이지 정보를 활용해 PageResponseDTO의 인스턴스를 생성하고 반환하는 방법에 대해 설명하고 있습니다.

    • PageResponseDTO 오에서 @Builder를 이용한 객체 생성 방법이 설명되고 있으며, 이를 활용해 검색된 데이터 목록과 페이지 정보를 담은 DTO 객체를 생성하는 방법이 제시되어 있습니다. 이 예시는 TodoServiceImpl에서의 사용 예를 보여주나, ProductSearchImpl에서의 사용법도 유사하게 적용할 수 있습니다.
  2. ProductSearchImpl에서 Querydsl을 사용한 검색 방법과 ProductServiceImpl에서 JPA를 사용하는 방법이 서로 다른 접근 방식을 보여주는 것이 맞습니다. 각각의 접근 방식은 상황에 따라 선택적으로 사용할 수 있으며, 특정 쿼리의 복잡성이나 성능 요건에 따라 적절한 기술을 선택하여 사용하는 것이 좋습니다.

이러한 작업에서 중요한 것은 비즈니스 로직에 맞게 데이터를 처리하고, 필요에 따라 JPA와 Querydsl 중 어느 것을 사용할지 결정하는 것입니다. JPA는 좀 더 일반적인 데이터 액세스 작업에 적합할 수 있고, Querydsl은 복잡한 쿼리 작업이 필요할 때 더 유리할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

hk.moon님의 프로필 이미지
hk.moon

작성한 질문수

질문하기