2017-04-15 98 views
0

此查詢有什麼問題:SELECT i FROM Item i WHERE 1 = 1 AND UPPER(i.nome) LIKE %:nome% ORDER BY UPPER(i.nome)?我在LIKE'%:nome%'中嘗試過使用單引號但沒有使用單引號,但它不起作用。JPA查詢LIKE不起作用

Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 
Exception Description: Syntax error parsing [SELECT i FROM Item i WHERE 1 = 1 AND UPPER(i.nome) LIKE %:nome% ORDER BY UPPER(i.nome)]. 
[56, 63] The identification variable '%:nome%' is not following the rules for a Java identifier. 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1605) 
+2

使用'喜歡:nome',和前面加上/追加百分號的參數值。由於在我的應用程序中進行搜索,因此需要在不同的職位上使用 –

回答

1

正如所解釋的here,你需要%包的價值,同時設置參數,例如:

query = em.createQuery("SELECT i FROM Item i WHERE 1 = 1 AND UPPER(i.nome) LIKE :nome ORDER BY UPPER(i.nome)"); 
query.setParameter("nome","%"+nome.toUpperCase()+"%"); 
+0

%。有3個選項可供搜索:子字符串,整個字母和字母/字符串的開始。 – ceklock

+1

您發佈的鏈接不是JPA文檔。它指向的是spring-data-jpa文檔,OP很可能沒有使用。如果他使用它,那麼他使用的查詢就可以正常工作,因爲鏈接到的文檔說:它會將此無效的JPQL查詢轉換爲有效的查詢。 –

+1

@JBNizet感謝您的意見。我已經更新了答案。 –