Spring boot 使用Spring数据本机查询时,位置为[1]的参数不存在错误

Spring boot 使用Spring数据本机查询时,位置为[1]的参数不存在错误,spring-boot,spring-data-jpa,nativequery,Spring Boot,Spring Data Jpa,Nativequery,我对spring boot和spring数据jpa是新手。我正在尝试使用本机查询根据从UI接收的搜索属性执行搜索 如果searchParam包含在任何指定列中(如本机查询中所述),则应搜索基于searchParam获得的记录 我已经编写了以下代码,但最终收到了标题中提到的错误。我已尝试在stackoverflow中查找响应。但我相信我已经遵循了许多帖子中提到的建议 我们将非常感谢在这方面提供的任何帮助 下面的代码片段 EpicController.java @CrossOrigin @R

我对spring boot和spring数据jpa是新手。我正在尝试使用本机查询根据从UI接收的搜索属性执行搜索

如果searchParam包含在任何指定列中(如本机查询中所述),则应搜索基于searchParam获得的记录

我已经编写了以下代码,但最终收到了标题中提到的错误。我已尝试在stackoverflow中查找响应。但我相信我已经遵循了许多帖子中提到的建议

我们将非常感谢在这方面提供的任何帮助

下面的代码片段

EpicController.java

@CrossOrigin
    @RequestMapping(value="/search", method = RequestMethod.GET)
    public Page<Epic> searchEpicsByProjectIdAndSearchParam(@RequestParam String searchParam, @RequestParam String projectId, Pageable pageable) throws Exception {

        logger.info("Inside searchEpicsByAttributes() based on searchQuery API");

        Page<Epic> results = null;

        try {
            results = epicService.searchEpicsByProjectIdAndSearchParam(searchParam, projectId, pageable);
        }
        catch(Exception ex) {
            ex.printStackTrace();
            throw new Exception("Exception occurred :: " + ex.getStackTrace());
        }

        return results;
    }
@Override
    public Page<Epic> searchEpicsByProjectIdAndSearchParam(String searchParam, String projectId, Pageable pageable) {

        logger.info(" Inside searchEpicsByProjectIdAndSearchParam() API in EpicServiceImpl");

        return epicRepository.findBySearchParamsAndProjectId(searchParam,projectId, pageable);
    }
@Repository
public interface EpicRepository extends JpaRepository<Issue, String> {

@Query(value = 
            "select i.* from issue i where ("
            + "upper(i.name) like upper('%?1%'))"
            +  "and upper(i.project_id) = upper('%?2%')"
            + "ORDER BY i.name DESC \n-- #pageable\n",
           countQuery = 
            "select count(i.*) from issue i where ("
            + "upper(i.name) like upper('%?1%'))"
            +  "and upper(i.project_id) = upper('%?2%')",
            nativeQuery = true)
    Page<Epic> findBySearchParamsAndProjectId(String name, String projectId, Pageable pageable);
}
跳过参数(即?1和?2)周围的单引号“'”。工作查询将类似于:

"select i.* from issue i where ("
        + "upper(i.name) like upper(%?1%))"
        +  "and upper(i.project_id) = upper(%?2%)"
        + "ORDER BY i.name DESC \n-- #pageable\n",
       countQuery = 
        "select count(i.*) from issue i where ("
        + "upper(i.name) like upper(%?1%))"
        +  "and upper(i.project_id) = upper(%?2%)"

谢谢你的及时回复。你的建议奏效了
2019-02-08 23:25:21.199  INFO 12556 --- [nio-8080-exec-1] c.a.m.A.controller.ProjectController     :  Inside searchEpicsByProjectIdAndSearchParam() API in EpicServiceImpl
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
        at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:384)
        at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:246)
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:525)
        at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
        at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:209)
        at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
Caused by: java.lang.IllegalArgumentException: Parameter with that position [1] did not exist
        at org.hibernate.jpa.spi.BaseQueryImpl.findParameterRegistration(BaseQueryImpl.java:502)
        at org.hibernate.jpa.spi.BaseQueryImpl.setParameter(BaseQueryImpl.java:692)
        at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:181)
        at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:32)
        at org.springframework.data.jpa.repository.query.ParameterBinder.bind(ParameterBinder.java:141)
        at org.springframework.data.jpa.repository.query.StringQueryParameterBinder.bind(StringQueryParameterBinder.java:61)
        at org.springframework.data.jpa.repository.query.ParameterBinder.bind(ParameterBinder.java:101)
        at org.springframework.data.jpa.repository.query.SpelExpressionStringQueryParameterBinder.bind(SpelExpressionStringQueryParameterBinder.java:76)
        at org.springframework.data.jpa.repository.query.ParameterBinder.bindAndPrepare(ParameterBinder.java:161)
        at org.springframework.data.jpa.repository.query.ParameterBinder.bindAndPrepare(ParameterBinder.java:152)
        at org.springframework.data.jpa.repository.query.AbstractStringBasedJpaQuery.doCreateQuery(AbstractStringBasedJpaQuery.java:81)
        at org.springframework.data.jpa.repository.query.AbstractJpaQuery.createQuery(AbstractJpaQuery.java:202)
        at org.springframework.data.jpa.repository.query.JpaQueryExecution$PagedExecution.doExecute(JpaQueryExecution.java:188)
"select i.* from issue i where ("
        + "upper(i.name) like upper(%?1%))"
        +  "and upper(i.project_id) = upper(%?2%)"
        + "ORDER BY i.name DESC \n-- #pageable\n",
       countQuery = 
        "select count(i.*) from issue i where ("
        + "upper(i.name) like upper(%?1%))"
        +  "and upper(i.project_id) = upper(%?2%)"