我正在使用Netbeans 7.3,Glassfish 3.1.2.2开发一个使用EclipseLink JPA 2.0连接到AS400的应用程序。所有查询都正常工作,直到我找到一个特定的NamedQuery:
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。我能做错什么?
答案 0 :(得分:0)
出于性能原因,JPA的某些实现采用缓存(例如EclipseLink)。如果数据库中的数据与正在运行的应用程序中看到的内容不一致,我会尝试重新启动。此外,您可能希望看一下刷新缓存或禁用缓存的方法。