[JPA] InvalidDataAccessApiUsageException 오류 해결

off_sujin·2022년 5월 13일
1

배경

벗동소(벗들의 동아리를 소개합니다) 프로젝트를 하면서 JPA로 동아리 검색 기능을 구현하는 중 다음과 같은 오류를 만났다.

java.lang.IllegalArgumentException: Parameter value [\] did not match expected type [java.lang.String (n/a)]

Postman을 이용해서 테스트를 하고 있었는데 처음 검색은 잘 되더니 2번째부터 위의 오류와 함께 500 오류가 떴다.

검색을 연속으로 하면서 파라미터가 넘어가는 부분에 매핑이 잘못되고 있는 것 같았다.
우선 내가 사용한 JPA Repository이다.

@Repository
public interface ClubRepository extends JpaRepository<Club, Long> {
    List<Club> findByNameContainingOrEngNameContainingIgnoreCase(String korKey, String engKey);
}

해결

해결 방법을 아래의 spring-data-jpa 깃허브 이슈에서 발견할 수 있었다.
https://github.com/spring-projects/spring-data-jpa/issues/2479

방법은 repository 메소드에 @Param 애너테이션을 붙여주는 것이다.

@Repository
public interface ClubRepository extends JpaRepository<Club, Long> {
    List<Club> findByNameContainingOrEngNameContainingIgnoreCase(@Param("korKey") String korKey,
                                                                 @Param("engKey")String engKey);
}

그래서 이렇게 각 파라미터마다 @Param 애너테이션을 붙여주니 여러 번 리퀘스트를 날려도 검색이 정상적으로 작동했다!


아주 좋다.


JPA 메소드를 이용해서 쿼리를 날릴 때에는 가급적 @Param 애너테이션을 붙여서 파라미터를 명확하게 바인딩해주는 게 좋을 것 같다!

profile
학습 중..

0개의 댓글