jingyulog

QueryDSL 5.0 - fetchResults(), fetchCount() Deprecated 본문

Tech/JPA

QueryDSL 5.0 - fetchResults(), fetchCount() Deprecated

jingyulog 2023. 5. 3. 15:49

🔎 deprecated 된 이유

  • fetchResults()와 fetchCount()는 개발자가 작성한 select 쿼리를 기반으로 count 용 쿼리를 내부에서 만들어서 실행한다.
  • 하지만 이게 단순한 쿼리에서는 잘 동작하지만, 복잡한 쿼리에서는 제대로 동작하지 않는다.
  • 따라서 count 쿼리가 필요하면 별도로 작성해야 한다.

💻 count 쿼리 예제

List<Item> content = queryFactory
        .selectFrom(item)
        .where(regDtsAfter(itemSearchDto.getSearchDateType()),
                searchSellStatusEq(itemSearchDto.getSearchSellStatus()),
                searchByLike(itemSearchDto.getSearchBy(), itemSearchDto.getSearchQuery()))
        .orderBy(item.id.desc())
        .offset(pageable.getOffset())
        .limit(pageable.getPageSize())
        .fetch();

JPAQuery<Long> countQuery = queryFactory
        .select(item.count())
        .from(item)
        .where(regDtsAfter(itemSearchDto.getSearchDateType()),
                searchSellStatusEq(itemSearchDto.getSearchSellStatus()),
                searchByLike(itemSearchDto.getSearchBy(), itemSearchDto.getSearchQuery()));


return PageableExecutionUtils.getPage(content, pageable, countQuery::fetchOne);