0+ 스프링/0 + SpringBoot(스프링부트)

[JPA 에러 해결] Named parameter not bound: ~

힘들면힘을내는쿼카 2022. 7. 29. 15:21
728x90
반응형

[JPA] Named parameter not bound: ~

작성한 쿼리를 테스트 하기위해

테스트 코드 작성한 것을 실행해보았다.

//쿼리
public interface FaultJpaRepository extends JpaRepository<Fault, Long> {
    @Query(value = "select f from Fault f" +
            " where f.resolveTime is null" +
            " and (f.type =: type1 or f.type =: type2)" +
            " order by f.writeTime desc")
    List<Fault> findBmsWarning(@Param("type1") int type1, @Param("type2") int type2);
}
@Test
void findBmsWarningQueryTest() {
    faultJpaRepository.findBmsWarning(1, 2);
}

그런데 다음과 같은 에러를 만나게 되었다.! ^^

Named parameter not bound : type2; nested exception is org.hibernate.QueryException: Named parameter not bound : type2
org.springframework.dao.InvalidDataAccessResourceUsageException: Named parameter not bound : type2; nested exception is org.hibernate.QueryException: Named parameter not bound : type2

 

@Param 문제?

parameter 부분에 문제가 생겼다고 해서 @Param에 문제가 있는 줄 알고 다음과 같이 변경했다.

//쿼리
public interface FaultJpaRepository extends JpaRepository<Fault, Long> {
    @Query(value = "select f from Fault f" +
            " where f.resolveTime is null" +
            " and (f.type =: type1 or f.type =: type2)" +
            " order by f.writeTime desc")
    List<Fault> findBmsWarning(@Param(value = "type1") int type1, @Param(vlaue = "type2") int type2);
}

하지만 결과는 같았다.^^

한참을 헤맨 결과.. 🥵

문제점을 찾게 되었다.

 

원인: JPQL 문법!

자세히 보면 f.type =: type1 부분에서 :과 type1 띄어쓴 것을 확인 할 수 있다.. ㅠㅠ

아래와 같이 수정

public interface FaultJpaRepository extends JpaRepository<Fault, Long> {
    @Query(value = "select f from Fault f" +
            " where f.resolveTime is null" +
            " and (f.type =:type1 or f.type =:type2)" +
            " order by f.writeTime desc")
    List<Fault> findBmsWarning(@Param("type1") int type1, @Param("type2") int type2);
}

 

후... 이것때문에 30분이나 날렸다.. ㅠㅠ

728x90
반응형