Boa tarde pessoal, estou com uma dúvida conceitual simples…
No seguinte cenário:
Entidade 1: Vendas
Entidade 2: Produtos
Entidade 3: Venda_Produto
Tudo funcionando perfeitamente… porém, preciso fazer relatórios… 1 deles é de produtos vendidos…
Supondo q eu tenha 2 vendas… ambas vendendo 1 unidade do produto xyz…
No relatório, preciso mostrar os produtos vendidos… q neste caso seria a soma das duas vendas… preciso retornar 2 unidades do produto xyz…
Sem hibernate eu faria via comando SQL que me traria isso sintetizado normalmente… mas e com Hibernate? como abordar isso?
Abraços
Da mesma forma.
O hibernate apenas “abstrai” certas coisas, para que você não tenha que escrever SQL diretamente, mas, no final, o SQL será gerado e deve, obrigatoriamente, ser o mesmo que você faria manualmente.
Creio que você tenha o seguinte cenário:
- Venda possui uma lista de VendaProduto
- VendaProduto associa um Produto a uma Quantidade vendida
- Produto é um produto.
Logo, fazendo algo como:
String hql = "FROM Vendas v";
Você obtém todas as vendas, cada qual com sua lista de ProdutoVenda, que, por sua vez, trará cada produto associado.
[quote=drsmachado]Da mesma forma.
O hibernate apenas “abstrai” certas coisas, para que você não tenha que escrever SQL diretamente, mas, no final, o SQL será gerado e deve, obrigatoriamente, ser o mesmo que você faria manualmente.
Creio que você tenha o seguinte cenário:
- Venda possui uma lista de VendaProduto
- VendaProduto associa um Produto a uma Quantidade vendida
- Produto é um produto.
Logo, fazendo algo como:
String hql = "FROM Vendas v";
Você obtém todas as vendas, cada qual com sua lista de ProdutoVenda, que, por sua vez, trará cada produto associado.[/quote]
Sim… na verdade é este mesmo o cenário… mas eu naum gostaria de receber as Vendas com seus respectivos produtos vendidos… gostaria de um relatorio de produtos vendidos mais ou menos assim:
CÓD. PRODUTO:…DESCRICAO:…QTDADE VENDIDA:…PREÇO MÉDIO:
102031…PRODUTO XYZ…10…15,50
102032…PRODUTO XYZ…70…16,50
102033…PRODUTO XYZ…80…13,50
102034…PRODUTO XYZ…180…19,50
(Coloquei pontos pq o forum remove os espaços duplicados)
Sintetizando todas as vendas… mas pelo que me parece, só consigo fazer selects de entidades mapeadas… e não um select com subselects, sums, avg’s e etc… trazendo informações diversas, que não estão em classes mapeadas (digo em relação ao retorno, e não qto a origem dos dados)
Ok, como você faria em SQL? Por que, em algum momento, você vai precisar verificar se aquele produto está ligado a um ProdutoVenda e verificar a qual venda este ProdutoVenda está associado, não? Logo, precisará de alguns joins nas tabelas vendas e produto_venda, certo?
Outro ponto, Se você quer apenas os produtos, pode fazer
String hql = "SELECT v.produtoVenda FROM Venda v WHERE ...";
Isso trará toda a lista de produtoVenda pertencente a uma venda que atenda a cláusula where…
[quote=drsmachado]Ok, como você faria em SQL? Por que, em algum momento, você vai precisar verificar se aquele produto está ligado a um ProdutoVenda e verificar a qual venda este ProdutoVenda está associado, não? Logo, precisará de alguns joins nas tabelas vendas e produto_venda, certo?
Outro ponto, Se você quer apenas os produtos, pode fazer
String hql = "SELECT v.produtoVenda FROM Venda v WHERE ...";
Isso trará toda a lista de produtoVenda pertencente a uma venda que atenda a cláusula where…[/quote]
Eu faria mais ou menos assim…
Select sum(qtdade) as qtdade_total,
produto,
sum(qtdade * valor_unitario) as valor_total,
(sum(qtdade * valor_unitario) / sum(qtdade)) as valor_unitario
from venda_produto vp
where vp.venda in
(select v.id from venda v where v.data >= '01/01/2000')
group by vp.produto
O que me resulta em:
QTDADE_TOTAL:…PRODUTO:…VALOR_TOTAL:…VALOR_UNITARIO:
100…25…1000,00…10,00
Sugiro que você estude mais HQL e/ou a API Criteria. Você terá ótimas surpresas…
Estudarei sim… Eu sei usar bem criterias e querys, mas não entendi apenas como irei sintetizar… eu poderia trazer as vendas… as vendas_produto das vendas q eu quiser… etc etc etc…
mas como tem algum exemplo, por mais simples que seja, de como sintetizar isso? o q eu naum estou entendendo é se eu terei de sintetizar isso “na mão” ou se tem alguma maneira de fazer isto… sou novo em Hibernate…
Trazer os registros em questão eu sei numa boa… a questão é como criar campos com somatória, por exemplo…
Como te disse, estude HQL e Criteria…
Obrigado por responder!
Alguém ai pode me explicar o conceito?