Fiz algo mais customizável:
@Eager
public class TomadorCredenciadoRepositoryImpl implements AggregationOperationsRepository<TomadorCredenciado, TomadorCredenciadoDTO> {
private static final long serialVersionUID = -1368660417400093037L;
@PersistenceContext
EntityManager em;
@Override
public TomadorCredenciadoDTO calcAggregate(Specification<TomadorCredenciado> specification) {
final CriteriaBuilder cb = em.getCriteriaBuilder();
final CriteriaQuery<TomadorCredenciadoDTO> query = cb.createQuery(TomadorCredenciadoDTO.class);
final Root root = query.from(TomadorCredenciado.class);
final TypedQuery<TomadorCredenciadoDTO> tq = em.createQuery(query.where(specification.toPredicate(root, query, cb))
.multiselect(cb.sum(root.get(TomadorCredenciado_.VALOR_CUSTEIO)),
cb.sum(root.get(TomadorCredenciado_.VALOR_INVESTIMENTO)),
cb.sum(root.get(TomadorCredenciado_.VALOR_PESSOAL)))
);
return tq.getSingleResult();
}
}
public interface AggregationOperationsRepository<T, P> extends Serializable {
P calcAggregate(Specification<T> specification);
}