Duvida do itemvenda no hibernate

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.

Benvindo ao guj, antes de mais nada…
http://guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor

É fato, tópicos bem formatados atraem mais respostas.

Dica nº 2, troque a tag quote por code…