你好,我想尝试运行这个查询
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,则会收到以下错误:
Exception occurred while performing a database query: IllegalArgumentException-> An exception occurred while creating a query in EntityManager: Exception Description: Syntax error parsing [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 ]. [68, 85] The left expression is not an arithmetic expression. [131, 148] The left expression is not an arithmetic expression.
有人可以解释一下为什么会发生这种情况以及如何解决它吗?
是的,我检查了 WarmTime EntryDate 和 LeaveDate 是可调用的。
最佳答案
正如@neil stockon所说,有些函数不是有效的JPQL操作,我建议,首先去记录并获取制作和更新所需的信息
SELECT w.ID, w.ENTRY_DATE from WARMTIME_MONITORING w
WHERE LEAVING_DATE IS NULL;
一旦获得记录的 id 和entry_date,就可以对日期执行所需的操作,以符合新日期并执行 JPQL 更新
UPDATE WARMTIME_MONITORING w
SET w.WARM_TIME = :time
WHERE ID = :id
如果您有大量数据,这可能会非常低效。
关于java - JPQL 查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36710113/