jpa 在带注解的查询中找不到@Query错误

hgc7kmma  于 2022-11-14  发布在  其他
关注(0)|答案(5)|浏览(201)

我将Spring Data 与REST结合使用。我有一个表country和一个与之对应的名为www.example.com的实体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'!
yzuktlbb

yzuktlbb1#

我修好了
查询需要修改为

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

应该是**:code而不是?1**

pkwftd7m

pkwftd7m2#

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

jdg4fx2g

jdg4fx2g3#

只是对现有答案的补充

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

不要将“:code”之间的空格作为“:``代码”,否则将出现错误。

u5i3ibmn

u5i3ibmn4#

如果使用@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);
xxls0lw8

xxls0lw85#

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

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

相关问题