java - native 查询抛出 InvalidDataAccessApiUsageException

标签 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,但这没有用。希望有人知道我做错了什么......

最佳答案

查询应该是

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

原因是参数不需要被包装到' '中。也只是使用自然顺序。无需提供?1

关于java - native 查询抛出 InvalidDataAccessApiUsageException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43470563/

相关文章:

java - 如何处理Flyway迁移脚本中的DCL?

javascript - 将 JSON 文件传递​​到 php 服务器,然后将其中的数据保存到 Mysql DB

java - Spring Boot 桌面独立应用程序中的 Apache Shiro

java - 恢复上一个 session 的属性

java - 如果是字符串,应该如何使用同步?

java - 使用输入流读取 java 属性文件

mysql多列排序顺序

java - 使用 spring 配置文件时将 bean Autowiring 到 TestNG 测试时出现问题

java - 将对象缓存为不可变类

c# - 尝试生成大量以 mysql 数据库内容作为源的组合框时遇到问题