【问题标题】:JPA Criteria API causing missing right parenthesis errorJPA Criteria API 导致缺少右括号错误
【发布时间】:2015-11-05 07:12:55
【问题描述】:

我有以下表达式来连接两列

Expression<String> stringConcat = 
criteriaBuilder.concat(criteriaBuilder.concat(rootPr.get(ProductList_.prodDesc), " # "), 
rootEmp.get(ProductEmp_.empNo));

它在 CriteriQuery 中以如下方式使用,

criteriaQuery.multiselect(root.get(ProductCatalogue_.userId), 
root.get(ProductCatalogue_.productList),criteriaBuilder.selectCase()
.when(criteriaBuilder.equal(root.get(ProductCatalogue_.prodId),"ZCX"), stringConcat)
.otherwise(rootPr.get(ProductList_.prodDesc)));

但是当生成 SQL 时,它会抛出错误

缺少右括号

因为在if else 部分 SQL 有一个问号,因为它需要一个参数

THEN (t0.prodDesc = ?)

如何解决这个问题?

【问题讨论】:

  • 为什么不显示为该条件查询生成的完整 SQL 而不是一些快照。然后提及哪个 JPA 提供者。然后,如果它生成不正确的 SQL,则向您的 JPA 提供程序提出错误(他们都有错误并且需要了解这些事情)
  • 和 ProductEmp_ ...这与候选实体有什么关系?它的连接在哪里?要验证是否是导致问题的“concat”...只需执行 Criteria 查询选择“concat”并查看它是否将此参数放在那里
  • rootEmp 是什么?在不知道它是什么的情况下无法评论那个 concat。如前所述...尝试使用仅将 concat 作为选择子句的基本条件查询,仅测试 concat(即没有 CASE)
  • @NeilStockton 没有case 声明concat 效果很好。添加大小写时,会引发错误。
  • 您使用的是哪个 EclipseLink 版本? There was a bug exactly on this issue,在 2.4.2 版本中修复。我可以在 2.5.2 中测试相同的代码并且工作正常。

标签: jpa eclipselink jpa-2.0 criteria-api


【解决方案1】:

这个is an EclipseLink bug,已在版本 2.4.2 中修复。 升级到较新的版本,它将工作(在 EclipseLink 2.5.2 上测试)。

【讨论】:

  • 感谢您的洞察,我升级到 EclipseLink 2.5.2 版本,错误消失了。非常感谢。
猜你喜欢
  • 2015-03-31
  • 1970-01-01
  • 2016-10-23
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多