(Resolvido)Duplicidade de Dados - MySQL

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

@Lucas_Camara



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

@Lucas_Camara

Tu mostrou tudo menos a lista de produtos da venda kkkk

1 curtida

@Lucas_Camara

mals ae…

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