JPA NamedQuery返回空ResultList
问题描述:
我正在使用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。我可能做错了什么?
答
出于性能原因,JPA的一些实现采用缓存(例如EclipseLink)。如果数据库中的数据与您在正在运行的应用程序中看到的数据不符,我会尝试重新启动。此外,你可能想要看看有什么方法刷新缓存或禁用它。
+0
我怀疑问题是缓存相关的,因为我已经*重新启动几次,试图隔离这个原因。在任何情况下,我尝试了你的建议并以编程方式刷新缓存,但尽管所有其他NamedQueries都正常工作,ResultList仍然是空的。我将编辑问题以添加如何设置参数。 – Zeratul2k 2013-04-24 18:06:49
尝试删除部分AND子句,直到返回行。 – 2013-04-24 17:34:08
@ToddMurray我试过你的建议,但查询只在删除了整个WHERE子句时才起作用。现在我想知道如果这是一个参数问题,相应地更新了问题。 – Zeratul2k 2013-04-24 18:12:41
'setParameter(“hacK”,...)'需要一个列表作为第二个参数。您正在传递一个文字字符串。 [看到这里](http://*.com/questions/4378824/adding-in-clause-list-to-a-jpa-query) – 2013-04-24 18:34:16