我能够建立使用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