Ola a todos, aqui no meu programa eu tenho um processo de negocio funcionando gravando as coisas direito mas, na tabela itemvenda deveria adicionar o numero de produtos que foi para a tabela. por exemplo, adiciono 3 tipos de produto JTable e depois quando encerrar a venda, da um save na tabela venda e no itemvenda teria 3 linhas de save.
mas só está salvando uma vez no itemvenda, é salva o ultimo produto adicionado.
Na classe ItemVenda esta mapeado assim:
@Entity
@Table(name="itemvenda")
@SequenceGenerator(name="itemvenda_iditemvenda_seq", sequenceName="itemvenda_iditemvenda_seq")
public class ItemVenda {
@Id
@GeneratedValue(generator="itemvenda_iditemvenda_seq", strategy=GenerationType.AUTO)
@Column(name="iditemvenda")
private int id;
@ManyToOne(fetch = FetchType.EAGER ,cascade=CascadeType.PERSIST)
@JoinColumn(name="idproduto",insertable=true, updatable=true)
Produto produto;
@ManyToOne(fetch = FetchType.EAGER,cascade=CascadeType.PERSIST)
Venda venda;
private int quantidade;
Na classe Produto está mapeado assim:
//outros atributos...
@OneToMany(mappedBy="produto", cascade=CascadeType.PERSIST)
private List<ItemVenda> item;
set and gets...
Na classe Venda estpa mapeado assim:
//outros atributos e mapeamentos de outras coisas...
@OneToMany(mappedBy="venda", cascade=CascadeType.ALL)
private List<ItemVenda> item_produtos;
Ai no controle da venda o método de registrar a venda começa assim.
private void registraVenda() {
int resposta = JOptionPane.showConfirmDialog(null,
"Deseja realmente registrar esta venda?", "Registro de venda",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
funcionario = Funcionario.getInstance();
produto = Produto.getInstance();
cliente = Cliente.getInstance();
if (resposta == 0) {
int rowsCount = TelaControleDeVendasPanel.tableModelItens.getRowCount();
for (int i = 0; i < rowsCount; i++) {
String id = TelaControleDeVendasPanel.tableModelItens.getValueAt(i, 0).toString();
String nome = TelaControleDeVendasPanel.tableModelItens.getValueAt(i, 1).toString();
int qtd = Integer.parseInt(TelaControleDeVendasPanel.tableModelItens.getValueAt(i, 2).toString());
String preco = TelaControleDeVendasPanel.tableModelItens.getValueAt(i, 3).toString();
produto.setId(Integer.parseInt(id));
produto.setNome(nome);
item.setQuantidade(qtd);
item.setProduto(produto);
item.setVenda(venda);
venda.getItem_produtos().add(item);
produto.getItem().add(item);
}//restante...
O hibernate grava apenas uma linha de codigo no banco no itemvenda. Mesmo se eu mandei salvar 3 produtos, ele grava só o o ultimo adicionado.
Sabem me dizer se é o mapeamento do hibernate que deve se mudado ou se estou errando nesse “for” ai que está pegando os produtos da JTable e setando.
detalhe esse método de registrar venda tem mais coisa nele mais o resto ta pegando tudo, a parte de frete , pagamento e funcionario. Mais faltou o itemvenda gravar direito. Por favor me ajudem.