[RESOLVIDO] Sum com Hibernate

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?

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

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.

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

RESOLVIDO. Valeu.

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

Agradeço.

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

[quote=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();[/quote]

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;

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

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.