2016-08-18 4 views
0

Ich versuche, eine Summe der Menge zu erhalten anhand von Kriterien (Kriterien Builder und CriteriaQuery)bekommen Summe einer Spalte CriteriaBuilder

Aber ich einen Fehler bekommen, wenn ich den Code schreibe; Hier ist mein Code

public Long findAmountByCriteria(OrderCriteria orderCriteria) { 

    final CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); 
    final CriteriaQuery<BigDecimal> query = criteriaBuilder.createQuery(BigDecimal.class); 
    Root<Order> root = query.from(Order.class); 

    query.select(criteriaBuilder.sum(root.get("amount"))) 
    .where(buildPredicateForOrderResponseCriteria(criteriaBuilder, orderCriteria, root)); 

    final TypedQuery<BigDecimal> typedQuery = entityManager.createQuery(query); 
    return typedQuery.getSingleResult().longValue(); 
} 

Betrag in einem BigDecimal Wert ist.

in ausgewählter Mehtod sagt es,

The method select(Selection<? extends BigDecimal>) in the type CriteriaQuery<BigDecimal> is not applicable for the arguments (Expression<Object>) 

in Summe Methode

Bound mismatch: The generic method sum(Expression<N>) of type CriteriaBuilder is not applicable for the arguments (Path<Object>). The inferred type Object is not a valid substitute for the bounded parameter <N extends Number> 

Wie kann ich dieses Problem beheben.

Antwort

1

statt, was Ihr tun

query.select(criteriaBuilder.sum(root.get("amount"))) 

versuchen, dies zu tun

query.select(criteriaBuilder.sum(root.<BigDecimal> get("amount"))) 
Verwandte Themen