我面临一个问题,我希望你能帮助我。
事实证明,我的 Oracle 11g 数据库中有一张表,用于存储一台电子设备的故障。表定义如下:
CREATE TABLE failure
( failure_id NUMERIC NOT NULL
, fecha TIMESTAMP NOT NULL
, module_id NUMERIC NOT NULL
, code NUMERIC
, PRIMARY KEY(failure_id)
);
其中“fecha”的意思是“日期”。
我需要按年或按月为一个特定模块获取故障,但我不能。我的 ORM 将 TIMESTAMP 类型映射到 java.sql.Date 但我不知道如何比较 JPQL 句子中的月份。我曾尝试将 ORACLE 函数与本机查询一起使用,但我遇到了另一个问题:转换结果。我将 JPA 2.0 与 Eclipselink 2.3.2 一起使用。
我的疑问是:
我可以在这个版本的 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);
同样的错误。
您知道仅使用一个查询来获取此数据的简单方法吗?我知道我可以获取一个模块,然后使用循环检查故障,但我认为这不是性能最好的解决方案。
谢谢。
我的消息来源: