我能夠建立使用JPA標準構建標準Case語句和NVL與標準API - 拋出:IllegalArgumentException:屬性[SingularAttributeImpmappings.DirectToFieldMapping
Java代碼片斷
cq.multiselect(root.get(ProductCatalogue_.userId),root.get(ProductCatalogue_.productList));
Join<ProductCatalogue, ProductList> joinList = root.join(ProductCatalogue_.productList, JoinType.LEFT);
Join<ProductCatalogue, ProductEmp> joinEmp = root.join(ProductCatalogue_.productEmp, JoinType.LEFT);
我這裏面臨不確定問題如何使用case語句與我在SQL
使用了上面的代碼和NVL更新1
criteriaQuery.multiselect(root.get(ProductCatalogue_.userId),
root.get(ProductCatalogue_.productList),criteriaBuilder.selectCase().
when(criteriaBuilder.equal(root.get(ProductCatalogue_.prodId),"ZCX"),
rootPr.get(ProductList_.prodDesc + " # " +
rootEmp.get(ProductEmp_.empNo))).otherwise(rootPr.get(ProductList_.prodDesc));
異常
java.lang.IllegalArgumentException異常:屬性[SingularAttributeImpl [org.eclipse.persistence.mappings.DirectToFieldMapping [prodDesc - > PRODUCT_LISTS.prodDesc]]]從被管理型[EntityTypeImpl @ 3567635:ProductList [javaType:class test.entity.ProductList descriptor:RelationalDescriptor(test.entity.ProductList - > [DatabaseTable(PRODUCT_LISTS)]),mappings:5]]不存在。
更新2
Expression<String> stringConcat =
criteriaBuilder.concat(criteriaBuilder.concat(rootPr.get(ProductList_.prodDesc), " # "),
rootEmp.get(ProductEmp_.empNo));
錯誤
缺少右括號
因爲那時SQL的一部分,有一個問號,因爲它是需要一個參數
THEN (t0.prodDesc = ?)
在JPA標準,NVL具有等效的。 'CriteriaBuilder.coalesce()'。 CASE也有等價的:'CriteriaBuilder.selectCase()' – Ish
@NeilStockton我已經嘗試過使用Case但是它導致了錯誤,我用我的Case語句和異常更新了我的問題。你可以好好看看。不確定我的'multiselect'中的case語句是否正確! – user75ponic
@Ish我試過使用案例,但它導致了錯誤,我用我的Case語句和異常更新了我的問題。你可以好好看看。 – user75ponic