필요한 컬럼만 가져오기 (생각)

<aside> 📌

엔티티 전부를들고와서 PC에 띄우는 형식으로 돼있다. 필요한 컬럼만들고 오는걸로 변환하자.

</aside>

리팩토링 전 코드

베스트셀러 구하는 쿼리

@Query("SELECT b,a FROM BookHistory bh JOIN bh.book b join bh.book.author a GROUP BY b.id ORDER BY COUNT(bh.id) DESC")
     List<Book> findBooksByHistory();

주간 베스트 셀러 구하는 쿼리

 @Query("SELECT b,a FROM BookHistory bh JOIN bh.book b join bh.book.author a WHERE bh.createdAt >= :startOfWeek AND bh.createdAt <= :endOfWeek GROUP BY b.id ORDER BY COUNT(bh.id) DESC")
     List<Book> findWeekBestSellers(@Param("startOfWeek") LocalDateTime startOfWeek, @Param("endOfWeek") LocalDateTime endOfWeek);

일별 베스트 셀러 구하는 쿼리

@Query("SELECT b FROM BookHistory bh JOIN bh.book b JOIN fetch bh.book.author a WHERE bh.createdAt >= :startOfDay AND bh.createdAt <= :endOfDay GROUP BY b.id ORDER BY COUNT(bh.id) DESC")
     Page<Book> findTopDayBestSeller(@Param("startOfDay") LocalDateTime startOfDay,
                                     @Param("endOfDay") LocalDateTime endOfDay,
                                     Pageable pageable);

이어보기 구하는 쿼리

@Query("SELECT bh FROM BookHistory bh JOIN FETCH bh.book b JOIN FETCH bh.user u WHERE u.id = :userId")
     List<BookHistory> findBookHistoryByUserId(@Param("userId") Integer userId);

필요한 컬럼만 가져오기 (적용)

1.해결방법 (JPA 문법 오류)

<aside> 📌

필요한 컬럼만 들고 오려고하니 JPA가 매핑되는 엔티티를 찾지 못해서 오류가 났다

</aside>