Bom dia meus caros! Um próspero 2022 com muitos bits e bytes para todos!
Por gentileza me tirem uma dúvida, é possível com Hibernate/JPQL fazer uma consulta e retornar uma matriz?
Vou exemplificar extamente o que estou fazendo e o que quero fazer:
Seguindo a aula de consulta para relatório, criei uma classe para retornar uma consulta de valores gastos por mês por centro de custo de uma determinada conta, funcionou tudo certindo =)
Classe que receberá os dados:
public class GastosByContaAndAnoVo {
public GastosByContaAndAnoVo() {
}
public GastosByContaAndAnoVo(Integer centroCusto, Integer mes, BigDecimal valor) {
this.centroCusto = centroCusto;
this.mes = mes;
this.valor = valor;
}
@Getter @Setter
private Integer centroCusto;
@Getter @Setter
private Integer mes;
@Getter @Setter
private BigDecimal valor;
}
Abaixo a consulta:
public List<GastosByContaAndAnoVo> listByContaAndAno(Integer idConta, Integer ano) {
String jpql = "SELECT NEW br.com.occhi.report.GastosByContaAndAnoVo ("
+ " lancamento.mes, "
+ " lancamento.centroCusto, "
+ " SUM (lancamento.valor)) "
+ " FROM LancamentoContabil lancamento "
+ " JOIN lancamento.classeCusto classeCusto "
+ " JOIN classeCusto.conta conta "
+ " WHERE lancamento.ano = :ano "
+ " AND conta.id = :idConta "
+ " GROUP BY lancamento.mes, lancamento.centroCusto";
Query query = session().createQuery(jpql);
query.setParameter("idConta", idConta);
query.setParameter("ano", ano);
return query.getResultList();
}
Eu tenho como retorno 3 colunas, os meses, o centro de custo e o valor total por centro de custo naquele mês.
Porém tenho que deixar isso mais legível, vou transformar numa tabela onde terei na primeira coluna os centros de custos e nas demais colunas o meses monstrando o valor gasto dentro de cada célula referente ao mês e ao centro de custo.
C.Custo | Jan | Fev | Mar | Abril | Ate dez... |
---|---|---|---|---|---|
1213 | R$500 | R$485 | R$125 | R$125 | R$000 |
1220 | R$300 | R$346 | R$448 | R$125 | R$000 |
Ao invés de montar uma matriz com java, percorrer ela e fazer a consulta dentro de cada mês, consigo montar essa matriz direto na consulta?