식당 상세 조회는 기존에 EntityManager에 내장된 findOne을 사용하여 식당을 클릭할 시 식당 정보를 한번에 모두 가져오는 방식이었다.
그러나 리뷰가 많아지면 한 번에 다 가져오기 힘들기 때문에 조회되는 리뷰수를 줄이고
리뷰 더 보기 버튼을 누르면 전체리뷰를 볼 수 있는 페이지로 이동하도록 변경 할 것이다.
public Restaurant findReviewTop3(Long restaurant_id) {
return em.createQuery("SELECT r FROM Restaurant r LEFT JOIN r.reviews rev WHERE r.id = :restaurant_id ORDER BY rev.likeCount DESC", Restaurant.class)
.setParameter("restaurant_id", restaurant_id)
.setMaxResults(3)
.getSingleResult();
}
이렇게 하면 리뷰가 3개만 담겨져 저장될 줄 알았는데 아니었다.
메서드를 두 개 사용하였다.
public List<Review> findReviewTop3(Long restaurant_id) {
return em.createQuery("select r from Review r where r.restaurant.id = :restaurant_id ORDER BY likeCount DESC", Review.class)
.setParameter("restaurant_id", restaurant_id)
.setMaxResults(3)
.getResultList();
}
한 번에 가져오고 싶었지만 리뷰는 따로 가져오는 방식을 택하게 되었다.
하지만 이 방식이 복잡하지 않고 간단한 방식이라 맘에 든다.
실력은 고민하면서 성장한다!