Seria melhor você criar uma tabela no seu bando de dados especificamente para o produto, onde este terá o código da venda, dessa forma, ficaria melhor a manipulação dos dados.
Notei que voce esta utilizando no seu codigo PreparedStatement , Connection, … recomendaria voce utilizar Hibernate ou Eclipse Link com JPA ou JPQL para criar relacoes entre classes que ele construiria automaticamente a tabela no banco e voce poderia salvar com certa facilidade uma lista de objetos.
Ja trabalhei com hibernate e JPA e isso é trabalho da facul com jdbc.
O problema é que tenho que armazenar na tabela venda uma lista de produtos, sendo que esses produtos são os produtos ja cadastrados no estoque.
Vou ter criar uma outra tabela de produtos é isso ?
sim, seria um relacionamento N pra N, vc teria q normalizar a tabela, e nisso seria criada uma nova tabela com a chave estrangeira do produto e a chave estrangeira da venda
[quote=andrielc]Notei que voce esta utilizando no seu codigo PreparedStatement , Connection, … recomendaria voce utilizar Hibernate ou Eclipse Link com JPA ou JPQL para criar relacoes entre classes que ele construiria automaticamente a tabela no banco e voce poderia salvar com certa facilidade uma lista de objetos.
Considere o seguinte, cada venda pode ter 1 ou mais produtos. Considerando apenas produtos, uma venda nunca terá menos de um produto, logo, o relacionamento de venda para produto é 1 venda para um ou vários produtos. Um produto poderá estar em uma ou mais vendas. Não o produto em si, mas o código que o representa. Então, podemos dizer que cada produto pode ser associado a uma ou mais vendas.
Logo, a relação é N : N.
Isso implica em alguns outros detalhes.
Quando você faz uma venda, você tem o código do produto e sua quantidade vendida.
Como vai associar isto?
Bem, eu criaria uma outra classe, ItemVenda, onde colocaria, no mínimo, codProduto e qtdProduto.
Na venda, ao invés de uma lista de produtos, colocaria uma List de ItemVenda.
No banco, teria três tabelas, vendas, produtos e itens_venda. Vendas possui uma PK venda_pk. Produtos possui uma pk, produtos_pk. itens_venda possui uma PK itens_venda_pk e duas FK vendas_fk e produto_fk. itens_fk faz referência à tabela vendas, especificamente a coluna venda_pk. produtos_fk referencia a tabela produtos, mais especificamente a coluna produto_fk.
seria ± desse jeito ai sim, mas na tabela Venda_Produto eu tiraria o codigo e deixaria uma PK composta por cod_venda e cod_produto, e tb adicionaria um campo qtd
mas acho que o drsmachado faria diferente, acredito que os 2 jeitos funcionem, veja qual lhe serve melhor xD
[quote=yurifw]seria ± desse jeito ai sim, mas na tabela Venda_Produto eu tiraria o codigo e deixaria uma PK composta por cod_venda e cod_produto, e tb adicionaria um campo qtd
mas acho que o drsmachado faria diferente, acredito que os 2 jeitos funcionem, veja qual lhe serve melhor xD[/quote]
Eu não vejo necessidade para uma PK composta. Você tem mais problemas que soluções ao usar uma FK composta, por isso eu prefiro criar uma específica e deixar as FKs isoladas.
Penso que uma PK composta só deve ser utilizada como último recurso mesmo.
[quote=yurifw]seria ± desse jeito ai sim, mas na tabela Venda_Produto eu tiraria o codigo e deixaria uma PK composta por cod_venda e cod_produto, e tb adicionaria um campo qtd
mas acho que o drsmachado faria diferente, acredito que os 2 jeitos funcionem, veja qual lhe serve melhor xD[/quote]
Ta ai gostei! Vou implementar aqui e vou postar o código pra ajudar alguém que tiver a mesmo duvida que eu.
[quote=drsmachado][quote=andrielc]Notei que voce esta utilizando no seu codigo PreparedStatement , Connection, … recomendaria voce utilizar Hibernate ou Eclipse Link com JPA ou JPQL para criar relacoes entre classes que ele construiria automaticamente a tabela no banco e voce poderia salvar com certa facilidade uma lista de objetos.
[]s[/quote]
Como se hibernate e jpa fossem bala de prata, resolvem todos os problemas…[/quote]
Não resolve todos, mas é uma otima ferramenta para pensar em usar, visando a clareza de relacionamento, facilidade na manipulacao de classes … No entanto, esse caso seria uma boa ferramenta para aprender e utilizar.
Minha crítica está baseada no que o autor do tópico colocou:
[quote=vicenthy]
Olá galera estou criando um mini-pdv para um estudo orientado na facul.
Seguinte tenho um classe Venda e uma classe vendaDao, estou com duvida em como faço para armazenar uma lista de produtos
no banco(estou usando jdbc).
[/quote]~
Geral acha que só por que está envolvido persistência tem e deve única e exclusivamente ser um caso de estudo, uma regra, uma maldita obrigação, usar a porra do JPA ou Hibernate ou EclipserLink.
Não estou dizendo que seja inútil, mas qualquer framework que visa resolver qualquer problema traz consigo uma série de complexidades que, em muitos casos, pode não ser viável. É a questão do preço a pagar.
Não há dúvidas que essas ferramentas ajudam. Uma retroescavadeira consegue fazer sozinha o trabalho de 20 homens, mas, se eu preciso só de dois pequenos buracos, para colocar as traves, por que vou fazer uma escavação?
Uma vez um professor me disse que a diferença entre obra de arte e desenho comum é saber quando parar, os artistas talentosos sabem quando devem parar, nós, pessoas comuns, não. Aí acabamos destruindo o que seria algo bom.
Aí o cara vai lá e coloca hibernate. Começa a ter problemas com as sessions. Vem, pergunta e a resposta é “que framework você usa para controlar as transações/sessões?” e sugerem Spring Framework. Lá vai o sujeito mudar a estrutura do projeto para adotar Spring. O problema se torna a quantidade de conexões. Sugerem c3p0. Ele precisa criar uma tela para relatórios. Sugerem vRaptor ou JSF 2 com richfaces.
Isso é gerar complexidade sem sentido. “Ah, mas o sistema pode crescer e assim ele precisa estar preparado”.
Aí eu volto à citação que coloquei acima…
[quote=drsmachado]Minha crítica está baseada no que o autor do tópico colocou:
[quote=vicenthy]
Olá galera estou criando um mini-pdv para um estudo orientado na facul.
Seguinte tenho um classe Venda e uma classe vendaDao, estou com duvida em como faço para armazenar uma lista de produtos
no banco(estou usando jdbc).
[/quote]~
Geral acha que só por que está envolvido persistência tem e deve única e exclusivamente ser um caso de estudo, uma regra, uma maldita obrigação, usar a porra do JPA ou Hibernate ou EclipserLink.
Não estou dizendo que seja inútil, mas qualquer framework que visa resolver qualquer problema traz consigo uma série de complexidades que, em muitos casos, pode não ser viável. É a questão do preço a pagar.
Não há dúvidas que essas ferramentas ajudam. Uma retroescavadeira consegue fazer sozinha o trabalho de 20 homens, mas, se eu preciso só de dois pequenos buracos, para colocar as traves, por que vou fazer uma escavação?
Uma vez um professor me disse que a diferença entre obra de arte e desenho comum é saber quando parar, os artistas talentosos sabem quando devem parar, nós, pessoas comuns, não. Aí acabamos destruindo o que seria algo bom.
Aí o cara vai lá e coloca hibernate. Começa a ter problemas com as sessions. Vem, pergunta e a resposta é “que framework você usa para controlar as transações/sessões?” e sugerem Spring Framework. Lá vai o sujeito mudar a estrutura do projeto para adotar Spring. O problema se torna a quantidade de conexões. Sugerem c3p0. Ele precisa criar uma tela para relatórios. Sugerem vRaptor ou JSF 2 com richfaces.
Isso é gerar complexidade sem sentido. “Ah, mas o sistema pode crescer e assim ele precisa estar preparado”.
Aí eu volto à citação que coloquei acima…[/quote]
Concordo plenamente, cada sistema tem sua necessidade e nós temos a obrigação de saber aplicar a ferramenta certa ao requisito certo.