Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Spring Data - Exemplo de como implementar a função de agregação sum

Olá, estou precisando implementar a somatória de algumas colunas utilizando Spring Data, mas não sei por onde começar, alguém poderia dar uma luz ?

Basicamente quero fazer:

select sum(tc.valor_custeio) from tb_tomador_credenciado tc;

Obrigado pela atenção.

2 respostas

Gustavo tenta algo desse tipo no seu repository

@Query("select sum(tc.valor_custeio) from tb_tomador_credenciado tc")
BigDecimal soma();
solução!

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);

}