我正在使用Netbeans 7.3,Glassfish 3.1.2.2開發應用程序,使用EclipseLink JPA 2.0連接到AS400。所有查詢正常工作,直到我得到一個特定的NamedQuery:JPA NamedQuery返回空ResultList
SELECT u FROM Table1 u WHERE u.field1 IN (:field1)
AND SUBSTRING(u.field2,3,1) IN (:hack) AND
SUBSTRING(u.field3,2,2) IN (:field3) ORDER BY u.field1
的參數設置如下:
Query query = getEntityManager().createNamedQuery("Table1.findAllWithRestrictions").setParameter("hack", "'S','C'").setParameter("field1", start).setParameter("field3", finish);
查詢執行,但對空列表返回。打開日誌記錄會生成SQL:
SELECT FIELD1, FIELD2, FIELD3, FIELD4, FIELD5, FIELD6
FROM ABC.DATAB.TABLE1 WHERE (((FIELD1 IN ('00')) AND
(SUBSTR(FIELD2, 3, 1) IN ('S','C'))) AND
(SUBSTR(FIELD3, 2, 2) IN ('0S'))) ORDER BY FIELD1 ASC
針對同一個數據庫連接運行此生成的SQL將返回多行。日誌中沒有任何異常拋出,只有一個空的ResultList。我可能做錯了什麼?
嘗試刪除部分AND子句,直到返回行。 – 2013-04-24 17:34:08
@ToddMurray我試過你的建議,但查詢只在刪除了整個WHERE子句時才起作用。現在我想知道如果這是一個參數問題,相應地更新了問題。 – Zeratul2k 2013-04-24 18:12:41
'setParameter(「hacK」,...)'需要一個列表作爲第二個參數。您正在傳遞一個文字字符串。 [看到這裏](http://stackoverflow.com/questions/4378824/adding-in-clause-list-to-a-jpa-query) – 2013-04-24 18:34:16