2017-04-03 123 views
0

我目前對JPA 2和Typed Query有一些小問題。 我在我的項目中使用LIKE子句創建了一個搜索特性,但是當我嘗試搜索像「marina」這樣的字符串時它沒有任何作用,它只在我輸入「marin」時才起作用,即使在數據庫中存在名稱碼頭。JPA 2中的Like子句TypedQuery僅適用於某些名稱參數,對於其他名稱不適用

這是我的代碼:

StringBuilder builder = new StringBuilder("select u from User u" 
       + " where (u.login LIKE :regex OR u.fullname LIKE :regex)" 
       + " AND (u.status <> :status)" 
       + " order by u.fullname"); 

     TypedQuery<User> query = jpaAPI.em().createQuery(builder.toString(),User.class); 
     query.setParameter("status", statusTypeDeleted()); 
     query.setParameter("regex", "%"+regex+"%"); 
     query.setFirstResult(init); 
     query.setMaxResults(end); 

因此,沒有人知道問題出在哪裏?

+2

我不知道它是否有幫助,但是您應該在查詢字符串中使用%字符,而不是參數中,因爲參數會被轉義。 – dpassy

+2

只是一個評論,使用'StringBuilder'的要點是*不*連接像這樣的字符串:'str1 + str2 + ...'。改用[append()](https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html#append(java.lang.CharSequence))方法。 – dic19

+0

,如果修復%does not work,然後查看日誌中調用的SQL,並且它應該顯示你的錯誤 –

回答

0

好的。我現在解決了這個問題。 的問題是在這條線:

query.setFirstResult(init); 

我給這個方法傳遞的值爲1,而不是0如何只存在名爲「碼頭」只有一個實體,查詢結果什麼都沒有,因爲第一個結果應該爲0.

相關問題