私は問題に直面しており、あなたに助けてもらいたいです。
Oracle 11g データベースには、1 つの電子デバイスの障害を保存するテーブルが 1 つあります。テーブルの定義は次のとおりです。
CREATE TABLE failure
( failure_id NUMERIC NOT NULL
, fecha TIMESTAMP NOT NULL
, module_id NUMERIC NOT NULL
, code NUMERIC
, PRIMARY KEY(failure_id)
);
「fecha」は「日付」を意味します。
1 つの特定のモジュールについて YEAR または MONTH ごとに失敗をフェッチする必要がありますが、できません。私の ORM は TIMESTAMP 型を java.sql.Date にマップしますが、JPQL 文で月を比較する方法がわかりません。ネイティブクエリで ORACLE 関数を使用しようとしましたが、結果をキャストするという別の問題に直面しています。Eclipselink 2.3.2 で JPA 2.0 を使用しています。
私の疑問は次のとおりです。
このバージョンの Eclipselink ライブラリで Oracle 関数を使用できますか? 私の経験ではノーと言います。
Query query = entityManager.createQuery("SELECT f FROM Failure f "
+ "WHERE EXTRACT(YEAR FROM f.fecha) = ?1 "
+ "AND f.moduleId.moduleId = ?2");
query.setParameter(1, year);
query.setParameter(2, idModule);
次のエラーが表示されます。Unexpected token [(]
Eclipselink関数を使用できますか? 私の経験ではノーと言います。
Query query = entityManager.createQuery("SELECT f FROM Failure f "
+ "WHERE EXTRACT('YEAR', f.fecha) = ?1 "
+ "AND f.moduleId.moduleId = ?2");
query.setParameter(1, year);
query.setParameter(2, idModule);
同じエラー。
1 つのクエリだけを使用してこのデータを取得する簡単な方法を知っていますか? 1 つのモジュールをフェッチして、ループで障害をチェックできることはわかっていますが、それは最高のパフォーマンスを発揮するソリューションではないと思います。
ありがとう。
私の情報源: