Spring Data JPA Native Query - 未注册命名参数
Posted
技术标签:
【中文标题】Spring Data JPA Native Query - 未注册命名参数【英文标题】:Spring Data JPA Native Query - Named parameters are not being registered 【发布时间】:2021-01-11 20:35:47 【问题描述】:我有以下由安装了 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);
这个 Spring Data JPA 存储库包含一个方法定义,它查询数据库以查找特定半径内的所有论坛。我将命名参数与本机查询结合使用 postgis 的 ST_DWithin
方法来执行此查询。
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
有什么想法吗?
【问题讨论】:
【参考方案1】:参数周围的单引号可能是问题所在。看看这个question。
【讨论】:
以上是关于Spring Data JPA Native Query - 未注册命名参数的主要内容,如果未能解决你的问题,请参考以下文章
spring data jpa中的page对象带到jsp页面遍历问题
是否有适用于 JPA、spring-data、spring-data-rest 的通用 REST 查询语言