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 查询语言

带有分页的 Spring Data 和 Native Query

使用 Spring Data 按日期排序 ASC

集成Spring Data JPA

spring-data-jpa 和 spring-boot-starter-data-jpa 的区别