使用@Query在带注释的查询错误中找不到

时间:2014-10-24 22:59:58

标签: jpa spring-data-rest

我在REST中使用spring数据。我有一个表国家和一个与之对应的实体,名为Country.java

我已将CountryRepositopry中的方法注释为

public interface CountryRepository extends Repository<Country, Short> {

    @RestResource(path = "bycode3")
        @Query("select c from Country c where c.codeAlpha3=?1 and c.active=1")
        Country findCountryByCodeAlpha3(@Param("code") String countryCode);
 }

我在启动tomcat时遇到异常 -

Caused by: java.lang.IllegalStateException: Using named parameters for method public abstract com.persistence.entity.common.Country com.persistence.repository.CountryRepository.findCountryByCodeAlpha3(java.lang.String) but parameter 'code' not found in annotated query 'select c from Country c where c.codeAlpha3=?1 and c.active=1'!

4 个答案:

答案 0 :(得分:8)

我得到了固定的

查询需要修改为

@Query("select c from Country c where c.codeAlpha3=:code and c.active=1") 

而不是?1 应该:代码

答案 1 :(得分:2)

xxx中的文字@Param("xxx")必须在查询value中使用。

答案 2 :(得分:0)

如果使用@Param批注,则应使用与ur实体类参数相同的参数,并且还应在“ (@Param("code") String countryCode)”中使用相同的参数:

public interface CountryRepository extends Repository<Country, Short> {

    @RestResource(path = "bycode3")
        @Query("select c from Country c where c.codeAlpha3=?1 and c.active=1")
        Country findCountryByCodeAlpha3(@Param("code") String countryCode);
 }

因此,应该这样更改:

@RestResource(path = "bycode3")
    @Query("select c from Country c where c.codeAlpha3=?1 and c.active=1")
    Country findCountryByCodeAlpha3(@Param("codeAlpha3") String countryCode);

答案 3 :(得分:0)

你可以试试这个,但是 始终确保@Param("code") 中的字符串值与您要在查询中使用的命名变量值相同。

@RestResource(path = "bycode3")
    @Query("select c from Country where c.codeAlpha3=:code and c.active=1")
    Country findCountryByCodeAlpha3(@Param("code") String countryCode);