【发布时间】:2016-08-11 03:26:24
【问题描述】:
您好,我想尝试运行此查询
UPDATE WarmTimeMonitoring wtm
SET wtm.warmTime = (EXTRACT(HOUR FROM CURRENT_TIMESTAMP - wtm.entryDate)*60)+ EXTRACT(MINUTE FROM CURRENT_TIMESTAMP - wtm.entryDate )
WHERE wtm.leavingDate IS NULL
当我在数据库上尝试直接查询时,它可以工作
UPDATE WARMTIME_MONITORING w
SET w.WARM_TIME = (EXTRACT(HOUR FROM CURRENT_TIMESTAMP - w.ENTRY_DATE)*60)+ EXTRACT(MINUTE FROM CURRENT_TIMESTAMP - w.ENTRY_DATE)
WHERE LEAVING_DATE IS NULL;
如果我尝试使用 JPQL,我会收到以下错误:
执行数据库查询时发生异常: IllegalArgumentException-> 创建一个异常时发生 EntityManager 中的查询:异常说明:语法错误解析 [UPDATE WarmTimeMonitoring wtm SET wtm.warmTime = (EXTRACT(HOUR FROM CURRENT_TIMESTAMP - wtm.entryDate)*60)+ EXTRACT(MINUTE FROM CURRENT_TIMESTAMP - wtm.entryDate ) WHERE wtm.leavingDate 为 NULL]。 [68, 85] 左表达式不是算术表达式。 [131, 148] 左边的表达式不是算术表达式。
谁能解释一下为什么会发生这种情况以及我该如何解决?
是的,我检查了 warmTime entryDate 和 leaveDate 是可调用的。
【问题讨论】:
-
我猜 CURRENT_TIMESTAMP 不是要使用的有效 JPQL 属性...
-
CURRENT_TIMESTAMP 完全有效。提取不是。 HOUR 不是。 MINUTE 不是...人们在形成查询之前实际上不查看 JPQL 引用吗? JPQL!= SQL。 datanucleus.org/products/accessplatform_4_2/jpa/…
-
@NeilStockton 好吧,谢谢,我环顾四周,但没有找到一些好的例子,只是基础知识。
-
@NeilStockton 知道如何使用 jpa 执行上述查询吗?
-
取决于您是否希望 JPQL 可移植(即仅使用标准 JPQL 函数)。使用标准 JPQL,您不能……直接使用 JPA 本机查询 (SQL)。使用非标准 JPQL 时,一些提供程序(例如 DataNucleus,我链接的文档)支持时间/日期函数……因此您可以执行 HOUR(wtm.entryDate) 和 HOUR(CURRENT_TIMESTAMP) 等操作并构建它。看看您的提供商有什么可用的?