2015-11-05 38 views
0

我有以下表達式來連接兩個列JPA標準API導致缺少右括號錯誤

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

,並在CriteriQuery應用於followng方式,

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然而,當,它是投擲錯誤

缺少右括號

,因爲SQL的if else部分有一個問號,因爲它是需要一個參數

THEN (t0.prodDesc = ?) 

如何解決這個問題呢?

+1

爲什麼不顯示爲該條件查詢生成的完整SQL而不是某些快照。然後提及哪個JPA提供商。然後,如果它生成不正確的SQL,那麼引發你的JPA提供者的錯誤(他們都有錯誤並且需要知道這樣的事情) –

+0

和ProductEmp_ ...這與候選實體有什麼關係?並加入到它的位置?要驗證是否是導致問題的「concat」...只需執行Criteria查詢選擇「concat」並查看它是否將此參數放在那裏 –

+0

rootEmp是什麼?如果不知道它是什麼,就不能評論這個concat。也如上所述...嘗試使用JUST concat作爲select子句的基本條件查詢來僅測試concat(即不測試) –

回答

3

這個is an EclipseLink bug,在2.4.2版本中已經修復。 升級到更新的版本,它會工作(在EclipseLink 2.5.2上測試)。

+0

感謝您的洞察力,我升級到EclipseLink 2.5.2版本,並且它的錯誤消失了。非常感激。 – user75ponic