【发布时间】:2012-09-20 10:47:32
【问题描述】:
我遇到了一个问题,我希望你能帮助我。
事实证明,我的 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);
同样的错误。
您知道仅使用一个查询来获取此数据的简单方法吗? 我知道我可以获取一个模块,然后通过循环检查故障,但我认为这不是性能最好的解决方案。
谢谢。
我的来源:
【问题讨论】:
-
您链接到的页面显示 EXTRACT 功能已添加到 EclipsLink 2.4,而您声明您使用的是 2.3.2。尝试更高版本。
-
@Chris 是的,你是对的。我尝试使用 EclipseLink 2.4,但无法应用新功能。我不知道出了什么问题..你用过吗?它有效吗?谢谢
-
EclipseLink 2.4 夜间测试验证提取工作:
-
您能否详细说明什么不适合您?
-
@Chris 我已将 eclipselink 更新到 2.4.0 版,我尝试使用
EXTRACT()运行我的测试,如下所示:Query query = entityManager.createQuery("SELECT f FROM Failure f " + "WHERE EXTRACT(YEAR,f.fecha) = ?1 " + "AND f.moduleId.moduleId = ?2 ");我得到的错误是:表达式不是有效的条件表达式[42,42] 必须指定日期部分 [42,42] EXTRACT 表达式中缺少左括号 [43, 68] 查询包含格式错误的结尾。
标签: performance oracle jpa eclipselink jpql