Native Query会抛出InvalidDataAccessApiUsageException

时间:2017-04-18 11:12:12

标签: java mysql spring jpa spring-boot

我正在尝试在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,但这不起作用。希望有人知道我做错了什么......

1 个答案:

答案 0 :(得分:3)

查询应为

Query query = em.createNativeQuery("SELECT * FROM `classification`  +
     "WHERE SOUNDEX(`data`) LIKE CONCAT('%', SUBSTRING(SOUNDEX(?'), 2), '%')",
      Classification.class);

原因是param不需要包含在' '中。也只是使用自然顺序。无需提供?1