Estou com muita dificuldade para fazer um select usando CriteriaQuery.
Mais precisamente este select:
SELECT sum(valor) as valor FROM despesas WHERE situacao = 'A PAGAR' and usuarios_id = ?
Usando CriteriaQuery ficaria assim:
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<BigDecimal> criteriaQuery = builder.createQuery(BigDecimal.class);
Root<Despesas> root = criteriaQuery.from(Despesas.class);
criteriaQuery.select(builder.sum(root.get("valor")));
criteriaQuery.where((builder.equal(root.get("situacao"), "PAGO")), builder.and(builder.equal(root.get("usuariosId"), 2))); // O PROBLEMA ESTÁ NESTA PARTE...
BigDecimal result = em.createQuery(criteriaQuery).getSingleResult();
return result;
Esse código está gerando este erro:
[EL Warning]: 2020-02-26 21:18:37.549--UnitOfWork(539762238)--Exception [EclipseLink-6078] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.QueryException
Exception Description: The class of the argument for the object comparison is incorrect.
Expression: [
Base br.com.easypaper.model.Despesas]
Mapping: [org.eclipse.persistence.mappings.ManyToOneMapping[usuariosId]]
Argument: [2]
Query: ReportQuery(referenceClass=Despesas )
javax.persistence.PersistenceException: Exception [EclipseLink-6078] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.QueryException
Exception Description: The class of the argument for the object comparison is incorrect.
Expression: [
Base br.com.easypaper.model.Despesas]
Mapping: [org.eclipse.persistence.mappings.ManyToOneMapping[usuariosId]]
Argument: [2]
Se eu retirar esta parte funciona, mas não filtra as despesas pelo usuário com id 2 (Exemplo).
Não é pra usar Object, isso foi só pra voce debugar e ver qual tipo vem de fato, se nesse object vem Number, BigDecimal ou Double. E assim fazer o cast correto.