Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA条件子查询排序:表达式中的查询键无效_Jpa_Subquery_Eclipselink_Collate - Fatal编程技术网

JPA条件子查询排序:表达式中的查询键无效

JPA条件子查询排序:表达式中的查询键无效,jpa,subquery,eclipselink,collate,Jpa,Subquery,Eclipselink,Collate,我正在使用ecliselink,并尝试将本机SQL转换为包含子查询的CriteriaAPI,但遇到了和子查询排序规则相关的异常 使用子查询从物料价格计算销售订单总额: public class SalesOrder { BigDecimal totalPrice; public List<OrderItem> orderItems; } public class OrderItem { SalesOrder salesOrder; BigDecimal

我正在使用ecliselink,并尝试将本机SQL转换为包含子查询的CriteriaAPI,但遇到了和子查询排序规则相关的异常

使用子查询从物料价格计算销售订单总额:

public class SalesOrder {
   BigDecimal totalPrice;
   public List<OrderItem> orderItems;

}

public class OrderItem {

   SalesOrder salesOrder;
   BigDecimal itemPrice;
}

update SalesOrder so set so.total=(select sum(itemPrice) from OrderItem oi where oi.salesOrderId=so.id);

你用的是什么版本的Eclipselink?
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaUpdate<SalesOrder> criteriaUpdate = criteriaBuilder.createCriteriaUpdate(SalesOrder.class);

Root<SalesOrder> root = criteriaUpdate.from(SalesOrder.class);

Subquery<BigDecimal> subquery = criteriaUpdate.subquery(BigDecimal.class);
Root<InventoryForm> subqueryRoot = subquery.correlate(root);
Expression<BigDecimal> itemPricePath = subqueryRoot.join("orderItems", JoinType.LEFT).get("itemPrice");
subquery.select(criteriaBuilder.sum(itemPricePath));

Path<BigDecimal> totalPricePath = root.get("totalPrice");
criteriaUpdate.set(totalCostPath, subquery);

em.createQuery(criteriaUpdate).executeUpdate(); 
org.eclipse.persistence.exceptions.QueryException
Exception Description: Invalid query key [orderItems] in expression.
Query: UpdateAllQuery(referenceClass=SalesOrder )
    at org.eclipse.persistence.exceptions.QueryException.invalidQueryKeyInExpression(QueryException.java:696)
    at org.eclipse.persistence.internal.expressions.QueryKeyExpression.validateNode(QueryKeyExpression.java:1009)
    at org.eclipse.persistence.expressions.Expression.normalize(Expression.java:3275)
    at org.eclipse.persistence.internal.expressions.DataExpression.normalize(DataExpression.java:369)
    at org.eclipse.persistence.internal.expressions.QueryKeyExpression.normalize(QueryKeyExpression.java:756)
    at org.eclipse.persistence.internal.expressions.QueryKeyExpression.normalize(QueryKeyExpression.java:669)
    at org.eclipse.persistence.internal.expressions.SQLSelectStatement.normalize(SQLSelectStatement.java:1461)
    at org.eclipse.persistence.internal.expressions.SubSelectExpression.normalizeSubSelect(SubSelectExpression.java:205)