java - JPQL 查询不起作用

标签 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,则会收到以下错误:

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/

相关文章:

java - JFrame 不显示按钮或背景颜色

java - 在 MVC 上应用 TDD

java - JDBC/MYSQL 通信链路故障(ECLIPSE/ANDROID)

mysql - 如何为Django(MySQL后端)中的每个表设置不同的存储引擎?

java - 当存储过程中有大部分逻辑时,我应该使用 JDBC 还是 Hibernate?

java - 如何在另一个类中使用在 class1 中创建的变量?

java - 原始类型和引用类型有什么区别?

multithreading - 两个并发请求,相同的 JPA 实体 - 有问题吗?

php - 如何将表的记录分配给外键

java - JPA 中的 @OneToMany 关系且 IS NOT EMPTY