Spring

SpringData JPA Native Query-명명 된 매개 변수가 등록되지 않았습니다.

기록만이살길 2021. 3. 21. 08:04
반응형

SpringData JPA Native Query-명명 된 매개 변수가 등록되지 않았습니다.

1. 질문(문제점):

postgis 확장이 설치된 postgres 데이터베이스가 지원하는 다음 저장소 클래스가 있습니다.

import java.util.List;
import java.util.Set;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface ForumRepository extends PagingAndSortingRepository<ForumEntity, Long> {


  @Query(value = "SELECT *"
      + "  FROM forums"
      + "  WHERE ST_DWithin(location, 'POINT(:lon :lat)', :meters,true)"
      + "  ORDER BY ST_Distance(location, 'POINT(:lon  :lat)') ASC",
      countQuery = "SELECT count(*) FROM forums WHERE ST_DWithin(location, 'POINT(:lon :lat)', :meters,true)",
      nativeQuery = true)
  List<ForumEntity> findInRadius(@Param("lat") Double lat,@Param("lon") Double lon,@Param("meters") Double meters, Pageable pageable);

}

이 SpringData JPA 저장소에는 특정 반경 내의 모든 포럼을 찾기 위해 데이터베이스를 쿼리하는 하나의 메서드 정의가 포함되어 있습니다. ST_DWithin이 쿼리를 수행하기 위해 postgis의 방법 과 결합 된 네이티브 쿼리와 함께 명명 된 매개 변수 를 사용하고 있습니다.

Spring Boot는 불만없이 정상적으로 시작되고 애플리케이션이 성공적으로 시작되었다고보고합니다. 그러나 해당 쿼리를 호출하려고하면 다음 예외가 발생합니다.Parameter with that name [lat] did not exist; nested exception is java.lang.IllegalArgumentException: Parameter with that name [lat] did not exist

위치 지정 매개 변수로 전환을 시도했지만 매개 변수가 존재하지 않는다는 동일한 오류가 발생했습니다.

Spring Boot 1.5.4를 사용하고 있습니다.

어떤 아이디어?

2. 해결방안:

매개 변수 주위의 작은 따옴표가 문제 일 수 있습니다. 질문을보십시오 .

65674157
반응형