我在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'!
答案 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);