【问题标题】:What is wrong with this JPQL query string这个 JPQL 查询字符串有什么问题
【发布时间】:2016-07-27 10:44:55
【问题描述】:
SELECT m FROM Clientmessage m 
WHERE (((m.userid = 4) OR ( m.recipientid = 4 ))  
AND (m.isdeleted = false)  
AND ((m.currentstate IS NULL) 
OR (m.currentstate IN (NULL, 'CREATED', 'DELIVERED')))) 
order by m.timereceived

第 1 行,第 48 列:[=] 处的语法错误。内部异常: MismatchedTokenException(80!=82)

知道错误可能是什么吗?!我没主意了。

所以 stackoverflow 希望我解释为什么我的问题与可能的重复问题不同。老实说,我厌倦了这个网站。事实并非如此,如果每次有人认为我必须解释某事时我都必须解释这一点,我会在别处寻求帮助。天哪。

【问题讨论】:

  • 你必须想象前 6 行的人是 1。这就是我最初发布它们的方式。然后他们被编辑了。
  • 向我们展示实体的代码
  • 尝试从您的 IN(NULL,...) 中删除 NULL,因为您已经对其进行了测试
  • farrellmr:是的。冗余空检查是原因。它不应该有所作为,但我认为当底层 jpa 组件将其转换为 jdbc/sql 时,它会导致奇怪的行为,因为可能不会检查标准中的冗余
  • 该查询的第 48 个字符是什么?!

标签: java jpa jpql


【解决方案1】:

我会发布一个答案,以便可以关闭问题 - 问题是 -

m.currentstate IN (NULL, 'CREATED', 'DELIVERED')

可以使用类似于 NVAL 的 COALESCE 函数

很遗憾你的问题被编辑了,然后不得不解释为什么重复是错误的

【讨论】:

    猜你喜欢
    • 2017-03-07
    • 2011-08-04
    • 1970-01-01
    • 2017-02-25
    • 2015-12-04
    • 1970-01-01
    相关资源
    最近更新 更多