2013-10-10 66 views
2

我在兩小時後搜索,但找不到解決方案。我想做一個簡單的查詢,它應該檢查字符串m_sName是否包含String變量。我嘗試了很多東西,但找不到正確的語法。使用變量工作並使用通配符也可以,但兩者都不起作用。WHERE子句和通配符中的變量值

TypedQuery<Kunde> query; 
query = em.createQuery("SELECT p FROM Kunde p" + 
    " WHERE p.m_sName LIKE :name", Kunde.class); 
m_lKunde = query.setParameter("name", m_sSearch).getResultList(); 

這個查詢確實有效,但我現在沒有如何使用通配符。我試過*,_,%個字符,但沒有任何工作。

+0

你可以試試:'查詢= em.createQuery(「選擇P檔FROM昆德p WHERE p.m_sName LIKE'%'||:name ||'%'「,Kunde.class);' –

+0

JPQL是否擁有SQL的連接運算符?我從來沒有見過。 –

回答

3

追加/前綴通配符令牌傳遞您在:

m_lKunde = query.setParameter("name", "%" + m_sSearch + "%").getResultList(); 
+0

非常感謝,它的工作原理。 – kai

+0

@kai很高興能幫到你。請接受,如果這解決了你的問題。 –

+0

是的,我會做:)我可以在2分鐘內接受。 – kai

0

也許這可以幫助

"SELECT p FROM Kunde p WHERE p.m_sName LIKE '%'|| :name || '%' ", Kunde.class); 
+0

異常說明:解析查詢的語法錯誤[SELECT p FROM Kunde p WHERE p.m_sName LIKE'%'|| :name || '%'],第1行,第46列:意外標記[|] – kai

+0

這是因爲JPQL不允許您使用SQL的連接操作符。 –

+0

總是有新的東西學習:) – mucio