1

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 のみがスローされます。私は何が間違っているのでしょうか?

4

1 に答える 1

0

JPA の一部の実装では、パフォーマンス上の理由からキャッシング (EclipseLink など) を採用しています。データベース内のデータが、実行中のアプリケーションで表示されているものと一致しない場合は、再起動を試みます。また、キャッシュを更新または無効にする何らかの方法を検討することもできます。

例: Eclipselink JPA キャッシング

于 2013-04-24T17:52:01.883 に答える