Dúvida conceitual

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?