gpt4 book ai didi

spring-data-jpa - java.lang.IllegalArgumentException : Parameter with that position [1] did not exist

转载 作者:行者123 更新时间:2023-12-04 03:26:39 25 4
gpt4 key购买 nike

这是我的存储库:

@Repository
public interface MyRepository extends JpaRepository<Entity, Long> {

public static final String DISTANCE = "((acos(sin(?1 * pi() / 180) * sin(a.latitude * pi() / 180) + cos(?1 * pi() / 180) * cos(a.latitude * pi() / 180) * cos((?2 - a.longitude) * pi() / 180)) * 180 / pi()) * 60 * 1.609344) as distance";

@Query("select new package.SearchResult(" + DISTANCE + ", a.addressOwner) from Address a group by a.addressOwner, col_0_0_ having col_0_0_ < ?3 order by col_0_0_")
public Page<SearchResult> findClosestByCoordinates(double lat, double lng, double maxDistance, Pageable pageable);

}

当我尝试执行此方法时,会发生异常:

具有该位置 [1] 的参数不存在;嵌套异常是 java.lang.IllegalArgumentException: 具有该位置 [1] 的参数不存在']

但是当我替换 Page<SearchResult> List<SearchResult> 一切正常。是Spring的错误还是什么?

更新 : 我想我发现了问题所在:当所有参数都参与 where 子句时,一切正常。但是,如果其中至少有一个没有在那里使用,它就会失败。但我不明白为什么它会发生在 Page 而在使用 List 时不会发生。处理它的最佳方法是什么?

最佳答案

您可以使用 @Param("query_param_name") 注释进行查询,使查询更加清晰易懂。

 @Repository
public interface MyRepository extends JpaRepository<Entity, Long> {

public static final String DISTANCE = "((acos(sin(:lat * pi() / 180) * sin(a.latitude * pi() / 180) + cos(:lat * pi() / 180) * cos(a.latitude * pi() / 180) * cos((:lng - a.longitude) * pi() / 180)) * 180 / pi()) * 60 * 1.609344) as distance";

@Query("select new package.SearchResult(" + DISTANCE + ", a.addressOwner) from Address a group by a.addressOwner, col_0_0_ having col_0_0_ < :maxDistance order by col_0_0_")
public Page<SearchResult> findClosestByCoordinates(@Param("lat")double lat, Param("lng")double lng, @Param("maxDistance") double maxDistance, Pageable pageable);

}

当spring在查询中找不到输入方法参数的位置时,就会出现此错误。
所以,@Param() 注解的使用将查询参数和方法参数绑定(bind)在一起,增加了查询的简单性

关于spring-data-jpa - java.lang.IllegalArgumentException : Parameter with that position [1] did not exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32254317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com