JPQL查询不起作用

时间:2016-04-19 06:22:21

标签: java mysql jpa

您好我想尝试运行此查询

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 IS NULL]。   [68,85]左表达式不是算术表达式。 [131   [148]左表达式不是算术表达式。

有人可以解释一下为什么会发生这种情况以及我如何解决这个问题?

是的,我检查了warmTime entryDate和leavingDate是否可以调用。

1 个答案:

答案 0 :(得分:0)

正如@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

如果您有大量数据,这可能效率很低。