命名参数未被检测到

Tre*_*zam 1 java hibernate jpa spring-boot

我有一个简单的查询如下.如果我硬编码id值如下,我得到预期的结果.但是如果我试图从Param获取值,它会抛出IllegalArgumentException异常.请注意,我已经尝试将Param用作long和String,但结果仍然相同.请告诉我我做错了什么.谢谢.

我的查询

public interface FeedDetailRepository extends JpaRepository<FeedDetail, Long> {
    @Query("select fd.message from FeedDetail as fd where fd.feedId =: id")
    String custom(@Param("id") long id);
}  
Run Code Online (Sandbox Code Playgroud)

在Controller,如果我运行以下命令,我会得到一个例外.

@GetMapping("/something/{id}")
    public String getDetail(@PathVariable long id){
        return feedDetailRepository.custom(id);
    }
Run Code Online (Sandbox Code Playgroud)

但如果我硬编码id值如下,我得到想要的结果.

public interface FeedDetailRepository extends JpaRepository<FeedDetail, Long> {
    @Query("select fd.message from FeedDetail as fd where fd.feedId = 4")
    String getDetailBasedOnFeedId(@Param("id") long id);
}
Run Code Online (Sandbox Code Playgroud)

例外

嵌套异常是java.lang.IllegalArgumentException:org.hibernate.QueryException:未绑定的命名参数:id

Emi*_*ski 7

我会改变

 @Query("select fd.message from FeedDetail as fd where fd.feedId =: id")
Run Code Online (Sandbox Code Playgroud)

到(差异在于空间)

 @Query("select fd.message from FeedDetail as fd where fd.feedId = :id")
Run Code Online (Sandbox Code Playgroud)

对你来说这是一个很小的区别,但对Spring来说很重要.他通过将名称附加到冒号来识别参数

:ID

有关更多详细信息,请参阅官方Spring Data JPA参考.