@Param
@Param
어느 날 시큐리티를 공부하면서 여러가지 코드를 늘려가던 중 프로젝트를 실행하여 댓글이 등록된 게시물을 들어갔는데 예전에 정상적으로 출력되던 댓글 리스트가 뜨지 않는 것이었다.
이번엔 무엇 때문에 정상적으로 기능하지 않는가 싶어서 로그를 읽어본 결과 댓글 리스트가 가져올 때 에러가 아래 이미지처럼 출력이 되어 있었다.
문제 해결
로그를 해석해본 결과 SQL 쿼리문에 들어가는 변수에 @Param 어노테이션을 사용하거나, Java8+에서는 -parameters를 사용하라고 알려주고 있는 것이었다.
여태까지 프로젝트에서 알아서 전달되는 파라미터에 변수를 매칭해서 이러한 문제가 발생이 안될 줄 알았지만 아마 코드가 많아지다보니 어디선가 꼬여 결국 매칭을 하지 못하는 것 같다.
문제를 알아냈으니 댓글을 담당하는 리포지토리의 SQL 문에 들어가는 매개변수에 @Param어노테이션을 추가한다.
- 수정 전
1
2
3
4
5
6
public interface ReplyRepository extends JpaRepository<Reply,Long> {
@Query("select r from Reply r where r.board.bno = :bno")
Page<Reply> list(Long bno, Pageable pageable);
}
- 수정 후
1
2
3
4
5
6
public interface ReplyRepository extends JpaRepository<Reply,Long> {
@Query("select r from Reply r where r.board.bno = :bno")
Page<Reply> list(@Param("bno")Long bno, Pageable pageable);
}
그리고 다시 댓글이 등록되어 있는 게시물을 호출하면 정상적으로 댓글 리스트가 출력된다.
This post is licensed under CC BY 4.0 by the author.