본문 바로가기

토이프로젝트/리뷰어(영화 리뷰 사이트)

14일차 - 영화 상세정보 조회 api 구현

jpql문 주의사항

jpql문에서 예상하지 못한 에러가 발생했다.

  @Query("SELECT "
      + "new org.movie.reviewer.domain.movie.dto.response.ActorInfo "
      + "(a.id, a.name, a.role) FROM Actor a "
      + "WHERE a.movie.id = :movieId "
  )
  List<ActorInfo> findActorsByMovieId(@Param("id") Long movieId);

Using named parameters for method public abstract java.util.List org.movie.reviewer.domain.movie.repository.MovieRepository.findActorsByMovieId(java.lang.Long) but parameter 'Optional[id]' not found in annotated query

파라미터 이름 설정에 관한 문제였다.

이전에는 기본키 이름을 movieId, actorId처럼 설정했지만 이번에는 모두 id이기 때문에 @Param 의 의미를 제대로 알고 사용하지 않았기 때문에 발생한 에러였다.

  @Query("SELECT "
      + "new org.movie.reviewer.domain.movie.dto.response.ActorInfo "
      + "(a.id, a.name, a.role) FROM Actor a "
      + "WHERE a.movie.id = :id "
  )
  List<ActorInfo> findActorsByMovieId(@Param("id") Long movieId);

이 코드처럼 @param에 사용한 변수명을 @Query내에서 사용하도록 해야 정상적으로 실행된다.

 

 

 

 

 

dto 리턴 형식

리뷰 목록 조회 api를 구현하던 중 문제가 생겼다.

리턴하고 싶은 형식은 다음과 같다.

{
    "id" : "1",
    "title" : "리뷰 제목",
    "commentCount" : "13",
    "user" : {
    	"id" : "0",
        "nickname" : "유저01",
        "userImage" : "#"
    },
    "movie" : {
    	"id" : "1",
        "title" : "영화01",
        "movieImage" : "#"
    },
}

단건 조회일 경우 reviewId로 user, movie를 따로 받아오면 되지만, 

내가 하고싶은건 목록조회이기 때문에 하나씩 따로 받아올 경우 너무 많은 쿼리가 날아가서 문제가 발생할 것 같다.

 

그래서 user, movie를 평평하게 펴서 정보를 전달해야할지, 아니면 방법이 있을지 좀더 알아봐야될 것 같다.