rafaspara2017:
venda.addProduto(produtoVendido.getProduto().getNome(), produtoVendido.getQuantidade(), produtoVendido.getProduto().getValor(), produtoVendido.getValorTotalDoItem());
Quase. Lembre-se que vc vai precisar do ID do produto para vincular com a venda (só o nome não vai funcionar). O mais correto seria assim:
venda.addProduto(
produtoVendido.getProduto(),
produtoVendido.getQuantidade(),
produtoVendido.getProduto().getValor(),
produtoVendido.getValorTotalDoItem()
);
1 curtida
@Lucas_Camara
metodo addProduto na classe Venda:
public void addProduto(String nome, Integer quantidade, Double valor, Double valorTotalDoItem) {
ProdutoVendido produtoVenda = new ProdutoVendido(getId(), this, null, quantidade, valorTotalDoItem);
produtos.add(produtoVenda);
}
Mude esse método para:
public void addProduto(Produto produto, Integer quantidade, Double valor, Double valorTotalDoItem) {
ProdutoVendido produtoVenda = new ProdutoVendido(null, this, produto, quantidade, valorTotalDoItem);
produtos.add(produtoVenda);
}
Não precisa passar o ID para o produto vendido (ele será gerado pelo mysql)
1 curtida
@Lucas_Camara
Fiz como vc passou, não está dando nenhum erro de compilação e nem de execução, mas veja como fica estranho
Aqui tenho uma única venda:
com um único produto:
e veja como está no Banco de Dados:
Aqui não era pra ter apenas 1 produto?
obs: as demais tabelas aparentemente estão ok!!
A tabela produto vendido vai guardar todos os produtos que foram vendidos para todas as vendas.
Se o sistema registrou uma venda A onde foram vendidos 10 produtos, na tabela ProdutoVendido deverá ter 10 registros referente à essa venda A .
1 curtida
Parece que sim. Apenas está estranho um registro na tabela ProdutoVendido onde o id da venda está NULL (mas deve ter sido algum erro durante o desenvolvimento).
1 curtida
@Lucas_Camara
Entendi, mas então tem algo errado, pois eu fiz 1 venda com 2 unidades de 1 produto
não deveria ter apenas 1 lancamento na tabela?
veja que tem 2:
Realmente, tah errado.
Vc consegue debugar para ver qtos produtos foram adicionados à venda no momento antes de chamar o método para salvar a venda?
1 curtida
@Lucas_Camara
eu fiz desta forma, só não sei se coloquei o breakpoint no lugar certo:
Coloca o breakpoint no momento em que a venda for salva no banco.
1 curtida
Vc precisa ver o que tem dentro da classe Venda . Para ver qtos itens estão na lista de ProdutosVendidos .
Coloca o breakpoint na linha:
vendaService.create(venda); // deve ser aqui que está salvando a venda
Veja a lista de produtos que está na variável venda . Se vc adicionar apenas 1 produto na venda, tem que ter apenas 1 item na lista de produtos da venda.
1 curtida
Tu mostrou tudo menos a lista de produtos da venda kkkk
1 curtida
Pelo debug parece que a venda possui apenas um produto msm. Tenta criar uma venda nova com um produto, e veja se vai salvar correto.
1 curtida
Acho que na classe ProdutoVendido não precisa de uma referência a Venda.
Está criando uma hierarquia “infinita”.
1 curtida
@RoinujNosde nesse caso, não tem problema pq eh soh o mapeamento para persistir no banco e ele não está mexendo com serialização para json.
A princípio o mais importante é ele conseguir salvar a venda com os produtos relacionados e conseguir recuperar depois para mostrar na tela.
Mas vc está certo. Uma relação unidirecional seria melhor, mas ele ainda está aprendendo e talvez iria soh complicar.
2 curtidas
@Lucas_Camara fiz novamente e continua como antes:
@Lucas_Camara e @RoinujNosde
eu fiz por curiosidade o que o @RoinujNosde sugeriu, fui na classe ProdutoVendido, comentei a referencia private Venda venda e rodei a app
continua lançando 2 produtos, mas pelo menos não deu null