2017-04-18 61 views
0

我試圖在Spring Boot中進行本機查詢,但不幸的是它會引發異常。本機查詢拋出InvalidDataAccessApiUsageException

這是我的方法:

@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中出現任何問題,但在春天它拋出這個異常:

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

試試只是'?'不@StanislavL我只是想任何數量 – StanislavL

+0

,但遺憾的是它不工作:( –

+1

什麼'SOUNDEX(?)'? – StanislavL

回答

2

查詢應該是

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

的原因是帕拉姆並不需要被包裝成' '。也只是使用自然順序。無需提供?1