我正在尝试在Spring Boot中创建一个本机查询,但遗憾的是它会引发异常。
这是我的方法:
@Override
public List<Classification> doFuzzySearch(String search) {
Query query = em.createNativeQuery("SELECT * FROM `classification` WHERE SOUNDEX(`data`) LIKE CONCAT('%', SUBSTRING(SOUNDEX('(?1)'), 2), '%')", Classification.class);
query.setParameter(1, search);
return query.getResultList();
}
查询运行在MySQL中没有任何问题,但在Spring中它抛出了这个异常:
org.springframework.dao.InvalidDataAccessApiUsageException: Parameter with that position [1] did not exist; nested exception is java.lang.IllegalArgumentException: Parameter with that position [1] did not exist
我不知道我做错了什么。我将?1
更改为?0
,但这不起作用。希望有人知道我做错了什么......
答案 0 :(得分:3)
查询应为
Query query = em.createNativeQuery("SELECT * FROM `classification` +
"WHERE SOUNDEX(`data`) LIKE CONCAT('%', SUBSTRING(SOUNDEX(?'), 2), '%')",
Classification.class);
原因是param不需要包含在' '
中。也只是使用自然顺序。无需提供?1