예전에는 JpaRepository는 엔티티로만 조회가 가능하다고 생각하였다.
하지만 엔티티에서 꼭 필요한 값 들만 조회하고 싶을 때는 DTO를 이용하여 조회가 가능하다는 사실을 알게되었다.
먼저 조회용 DTO를 하나 만든다.
@Getter
public class RoomPriceDto {
private Long postsId;
private Integer price;
public RoomPriceDto(Long postsId, Integer price) {
this.postsId = postsId;
this.price = price;
}
}
이후 repository에 jpql을 이용하여 조회를 한다.
@Query("select new com.team012.server.posts.repository.RoomPriceDto(r.postsId, min(r.price)) " +
" from Posts p, Room r where p.id = r.postsId group by p.id")
Page<RoomPriceDto> findAllRoomMinPrice(Pageable pageable);
이때 주의해야 할 점은 DTO 앞에 new와 DTO의 경로를 jpql에 적어줘야 한다는 것이다.
new com.team012.server.posts.repository.RoomPriceDto(r.postsId, min(r.price))
위와 같은 방법으로 내가 원하는 정보만 뽑아내서 조회를 할 수 있게 되었다.