[RESOLVIDO] Sum com Hibernate

9 respostas
R

Achei pouco material disso na internet.Alguém poderia ajudar?

Como faço o SUM no hibernate?

1)Achei em um link que fala em usar HAVING em vez de WHERE?
2)O resultado eu pego pelo list() ou uniqueResult()?

Alguém tem um exemplo de uso?

9 Respostas

RicardoCobain

Você pode fazer isso usando: Projections do Hibernate
Exemplo: http://www.roseindia.net/hibernate/projections/hibernate-projections.shtml

Lá você pode usar: proList.add(Projections.sum(“valor”));

Já que é apenas 1 resultado você pode usar uniqueResult()

D
public Float buscarValorTotal(Caixa caixa){
		   Criteria criteria = getSession().createCriteria(cliente.class)   
           .setProjection(Projections.sum("this.valor"))
           .add(Restrictions.isNotNull("this.valor"))
           .add(Restrictions.eq("this.caixa.id", caixa.getId()));  
		   Float valorTotal=(Float)criteria.uniqueResult();
           return valorTotal;
	  }

só não sei possivel usar having com criteria.

pmlm

O HAVING é para restrições sobre os campos calculados. Neste caso pode ser usado normalmente o WHERE.

R

RESOLVIDO. Valeu.

Kleber-rr

Rafael, pode postar sua solução?? estou com um problema semelhante.

Agradeço.

R

Double d = (Double) c .setProjection(Projections.sum("valor_liquido")) .add(Restrictions.ge("data_emissao", dataInicial)) //maior ou igual a dataInicial .add(Restrictions.le("data_emissao", dataFinal)) //menor ou igual a dataFinal .uniqueResult();

Kleber-rr

RafaelViana:
Double d = (Double) c .setProjection(Projections.sum("valor_liquido")) .add(Restrictions.ge("data_emissao", dataInicial)) //maior ou igual a dataInicial .add(Restrictions.le("data_emissao", dataFinal)) //menor ou igual a dataFinal .uniqueResult();

Rafael, preciso de uma ajuda sua pra fazer um método que me faça esse cálculo:

é pra fazer um movimento financeiro, onde cada lançamento inserido será computado no movimento dessa data.

Pode ser em criteria, ou sql, qq forma ajuda.

Agradeço;

R

É só fazer elas separadas da maneira como passei acima, vai retonar um Double, você subtrai esses…

Kleber-rr

Blz Rafael, olha só minha situação:

Eu tenho 2 tabelas: uma de movimentaçãoFinanceira e outra de lançamentos.

  • A tabela de movimentação tem os campos: id, dataMovimento e saldo;
  • A tabela lancamentos tem os campos: id, descricao, tipolancamento, valor e se relaciona com a anterior em n : 1 (muitos lancamentos para 1 movimentoFinanceiro);

A questão aqui é um movimento caixa, onde eu tenho q criar o movimento diário, que armazenem lançamentos do tipo entrada e saída, onde pega-se todos os lancamentos do tipo entrada e subtraem-se dos lancamentos do tipo saída para se obter um saldo parcial, que deveria ser gravado no banco na tabela movimentoFinanceiro no campo “saldo”.

Eu naum tenho certeza se a minha lógica para armazenar o saldo é correta, entao gostaria de uma sugestão.

Agradeço a ajuda.

Flws.

Criado 18 de novembro de 2009
Ultima resposta 22 de abr. de 2010
Respostas 9
Participantes 5