[RESOLVIDO]Problemas em salva na tabela itens_locacao

2 respostas
E

Galera, estou com o seguinte problema tenho uma tela locação, dentro dessa tela tenho um grid que mostra os nomes dos filmes que vão ser locados, e esses filmes, eles são salvos em uma tabela chamado item_locacao, o problema é que só salva o último item da locação.

ex: adicionei um filme com o codigo 3
adicionei um outro filme com o código 5

Na tabela item_locacao vai ter 2 registros salvos, mas só com o código do filme 5, o último que adicionei

Segue o código

cadastrar.addActionListener(new ActionListener() {
			public void actionPerformed(final ActionEvent e) {

				//validar os CAMPOS VAZIOS
				if (cod_cli.getText().equals("")) {
					cod_cli.requestFocus();
					JOptionPane.showMessageDialog(null, "Código do cliente não informado !");
				} else if (cod_filme.getText().equals("")) {
					cod_filme.requestFocus();
					JOptionPane.showMessageDialog(null, "Código do filme não informado !");
				} else if (data_locacao.getText().equals("")) {
					data_locacao.requestFocus();
					JOptionPane.showMessageDialog(null, "Data de locação não informado !");
				} else if (titulo.getText().equals("")) {
					titulo.requestFocus();
					JOptionPane.showMessageDialog(null, "Título não informado !");
				} else if (data_devolucao.getText().equals("")) {
					data_devolucao.requestFocus();
					JOptionPane.showMessageDialog(null, "Data da devolução não informado !");
				} else if (valorf.getText().equals("")) {
					valorf.requestFocus();
					JOptionPane.showMessageDialog(null, "Valor não informado !");
				} else {

					//Verifica se o cliente existe
					EntityManager em3 = f.createEntityManager();

					cliente_locadora c = new cliente_locadora();

					c = em3.find(cliente_locadora.class, Integer.parseInt(cod_cli.getText().trim()));

					//Se existir, entra, senao tem que digitar um cliente válido
					if (c != null) {

						EntityManager em = f.createEntityManager();
						EntityManager em1 = f.createEntityManager();

						locacao_locadora d = new locacao_locadora();
						filme_locadora film = new filme_locadora();//busca aquele filme por aquele codigo e mando pra detro do objeto

						// d.setCod_loc(Integer.parseInt(cod_locacao.getText().trim()));
						d.setCod_cli(Integer.parseInt(cod_cli.getText().trim()));
						d.setCod_filme(Integer.parseInt(cod_filme.getText().trim()));
						d.setData_loc(data_locacao.getText());
						d.setTitulo(titulo.getText());
						d.setData_devolucao(data_devolucao.getText());
						d.setValor(valorf.getText().trim());
						d.setQuantidade(quantidade.getText());

						em.getTransaction().begin();
						em.persist(d);

						em.getTransaction().commit();

						JOptionPane.showMessageDialog(null, "Cadastro efetuado com sucesso!");

						// Salvando os itens da locação

						if (!cod_cli.getText().trim().equals("")) {

							if (!rotulo10.getText().trim().equals("")) {

								TableModelLocacao modelLocacao = (TableModelLocacao) tabela.getModel();

								List<filme_locadora> filmes = modelLocacao.getItems();

								for (filme_locadora filme_locadora : filmes) {

									EntityManager em2 = f.createEntityManager();

									filmes_locados f = new filmes_locados();

									f.setCod_cli(Integer.parseInt(cod_cli.getText().trim()));
									f.setCod_filme(Integer.parseInt(cod_filme.getText().trim()));
									f.setTitulo(titulo.getText());
									em.getTransaction().begin();
									em.persist(f);

									em.getTransaction().commit();

									// atualizando o estoque

									film = em1.find(filme_locadora.class, Integer.parseInt(cod_filme.getText().trim()));

									if (!cod_filme.getText().trim().equals("")) {

										if (film != null) {

											int quant = Integer.parseInt(quantidade.getText().trim());
											int quant1 = film.getQtde_total();

											int calc = quant1 - quant;

											film.setQtde_total(calc);

											em1.getTransaction().begin();
											em1.persist(film);

											em1.getTransaction().commit();

										}
									}

								}

							} else
								JOptionPane.showMessageDialog(null, "Digite o código do cliente!");
						}

						else {
							JOptionPane.showMessageDialog(null, "Digite o código da locação !");
							cod_cli.requestFocus();
						}

						//

						//
						// <<<<< Comando para Inclusão = PERSIST >>>>>
						//
						cod_locacao.setText("");
						cod_cli.setText("");
						cod_filme.setText("");
						data_locacao.setText("");
						titulo.setText("");
						data_devolucao.setText("");
						valorf.setText("");
						quantidade.setText("");
						rotulo10.setText("");
						valor_total.setText("");

						TableModelLocacao modelLocacao2 = (TableModelLocacao) tabela.getModel();
						modelLocacao2.removeAll();
						data_locacao.setText(format.format(new Date()));

						cod_locacao.requestFocus();

						cadastrar.setEnabled(true);
						excluir.setEnabled(true);
						alterar.setEnabled(true);
						fechar.setEnabled(true);
						limpar.setEnabled(true);

						//
						// <<<<< Comando para Alteração = MERGE >>>>>
						//
						// em1.merge(film);
						//em1.getTransaction().commit();

						//	JOptionPane.showMessageDialog(null, "Cadastro efetuado com sucesso!");

					} else {
						JOptionPane.showMessageDialog(null, "Cliente não cadastrado!");
						cod_cli.requestFocus();
					}
				}
			}
		} // fim do new ActionListener
				);

Código da tabela Grid

private void buscarAction() {
		TableModelLocacao modelLocacao = (TableModelLocacao) tabela.getModel();

		List<filme_locadora> filme_locadora;

		filme_locadora = buscarFilmePorParametros(Integer.parseInt(cod_filme.getText()), titulo.getText());

		if (filme_locadora != null && !filme_locadora.isEmpty()) {

			for (filme_locadora filme_locadora2 : filme_locadora) {
				modelLocacao.addItem(filme_locadora2);
				JOptionPane.showMessageDialog(null, " código do filme!" + cod_filme);
			}

			tabela.setRowSelectionInterval(0, 0);
			tabela.requestFocus();
		} else {
			JOptionPane.showMessageDialog(null, "Cai no else!");
			quantidade.requestFocus();
		}

		double valor_final = 0;
		// double desconto= Double.parseDuble(desconto.getText());
		//     valor_final= valor_final+valortotal;

	}

	public void focusGained(final FocusEvent arg0) {
		// TODO Auto-generated method stub

	}

	@SuppressWarnings("unchecked")
	public List<filme_locadora> buscarFilmePorParametros(Integer cod_filme, String titulo) {

		List<filme_locadora> filme = new ArrayList<filme_locadora>();

		StringBuilder jpql = new StringBuilder("SELECT p FROM filme_locadora p WHERE p.cod_filme IS NOT NULL");//("SELECT p FROM cliente_locadora p WHERE p.cod_cli = ? OR p.nome_cli LIKE ?" );

		if (cod_filme != null && !cod_filme.equals("")) {
			jpql.append(" AND p.cod_filme = " + cod_filme);

		}

		else {
			JOptionPane.showMessageDialog(null, "Entrei no String!");
			jpql.append(" AND p.titulo =" + titulo);

		}

		try {
			EntityManager em = f.createEntityManager();
			Query query = em.createQuery(jpql.toString());
			filme = query.getResultList();
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, "Cai no erro!");
			e.printStackTrace();
		}

		///atualizando valor total
		for (filme_locadora filme1 : filme) {

			double valor = Double.parseDouble(valorf.getText().replace(',', '.'));
			valortotal = valortotal + valor;
			valor_total.setText(String.valueOf(valortotal));

		}

		return filme;

	}

[b]Alguma idéia, desde já agradeço…

2 Respostas

E

emanuelrm:
Galera, estou com o seguinte problema tenho uma tela locação, dentro dessa tela tenho um grid que mostra os nomes dos filmes que vão ser locados, e esses filmes, eles são salvos em uma tabela chamado item_locacao, o problema é que só salva o último item da locação.

ex: adicionei um filme com o codigo 3
adicionei um outro filme com o código 5

Na tabela item_locacao vai ter 2 registros salvos, mas só com o código do filme 5, o último que adicionei

Segue o código

cadastrar.addActionListener(new ActionListener() {
			public void actionPerformed(final ActionEvent e) {

				//validar os CAMPOS VAZIOS
				if (cod_cli.getText().equals("")) {
					cod_cli.requestFocus();
					JOptionPane.showMessageDialog(null, "Código do cliente não informado !");
				} else if (cod_filme.getText().equals("")) {
					cod_filme.requestFocus();
					JOptionPane.showMessageDialog(null, "Código do filme não informado !");
				} else if (data_locacao.getText().equals("")) {
					data_locacao.requestFocus();
					JOptionPane.showMessageDialog(null, "Data de locação não informado !");
				} else if (titulo.getText().equals("")) {
					titulo.requestFocus();
					JOptionPane.showMessageDialog(null, "Título não informado !");
				} else if (data_devolucao.getText().equals("")) {
					data_devolucao.requestFocus();
					JOptionPane.showMessageDialog(null, "Data da devolução não informado !");
				} else if (valorf.getText().equals("")) {
					valorf.requestFocus();
					JOptionPane.showMessageDialog(null, "Valor não informado !");
				} else {

					//Verifica se o cliente existe
					EntityManager em3 = f.createEntityManager();

					cliente_locadora c = new cliente_locadora();

					c = em3.find(cliente_locadora.class, Integer.parseInt(cod_cli.getText().trim()));

					//Se existir, entra, senao tem que digitar um cliente válido
					if (c != null) {

						EntityManager em = f.createEntityManager();
						EntityManager em1 = f.createEntityManager();

						locacao_locadora d = new locacao_locadora();
						filme_locadora film = new filme_locadora();//busca aquele filme por aquele codigo e mando pra detro do objeto

						// d.setCod_loc(Integer.parseInt(cod_locacao.getText().trim()));
						d.setCod_cli(Integer.parseInt(cod_cli.getText().trim()));
						d.setCod_filme(Integer.parseInt(cod_filme.getText().trim()));
						d.setData_loc(data_locacao.getText());
						d.setTitulo(titulo.getText());
						d.setData_devolucao(data_devolucao.getText());
						d.setValor(valorf.getText().trim());
						d.setQuantidade(quantidade.getText());

						em.getTransaction().begin();
						em.persist(d);

						em.getTransaction().commit();

						JOptionPane.showMessageDialog(null, "Cadastro efetuado com sucesso!");

						// Salvando os itens da locação

						if (!cod_cli.getText().trim().equals("")) {

							if (!rotulo10.getText().trim().equals("")) {

								TableModelLocacao modelLocacao = (TableModelLocacao) tabela.getModel();

								List<filme_locadora> filmes = modelLocacao.getItems();

								for (filme_locadora filme_locadora : filmes) {

									EntityManager em2 = f.createEntityManager();

									filmes_locados f = new filmes_locados();

									f.setCod_cli(Integer.parseInt(cod_cli.getText().trim()));
									f.setCod_filme(Integer.parseInt(cod_filme.getText().trim()));
									f.setTitulo(titulo.getText());
									em.getTransaction().begin();
									em.persist(f);

									em.getTransaction().commit();

									// atualizando o estoque

									film = em1.find(filme_locadora.class, Integer.parseInt(cod_filme.getText().trim()));

									if (!cod_filme.getText().trim().equals("")) {

										if (film != null) {

											int quant = Integer.parseInt(quantidade.getText().trim());
											int quant1 = film.getQtde_total();

											int calc = quant1 - quant;

											film.setQtde_total(calc);

											em1.getTransaction().begin();
											em1.persist(film);

											em1.getTransaction().commit();

										}
									}

								}

							} else
								JOptionPane.showMessageDialog(null, "Digite o código do cliente!");
						}

						else {
							JOptionPane.showMessageDialog(null, "Digite o código da locação !");
							cod_cli.requestFocus();
						}

						//

						//
						// <<<<< Comando para Inclusão = PERSIST >>>>>
						//
						cod_locacao.setText("");
						cod_cli.setText("");
						cod_filme.setText("");
						data_locacao.setText("");
						titulo.setText("");
						data_devolucao.setText("");
						valorf.setText("");
						quantidade.setText("");
						rotulo10.setText("");
						valor_total.setText("");

						TableModelLocacao modelLocacao2 = (TableModelLocacao) tabela.getModel();
						modelLocacao2.removeAll();
						data_locacao.setText(format.format(new Date()));

						cod_locacao.requestFocus();

						cadastrar.setEnabled(true);
						excluir.setEnabled(true);
						alterar.setEnabled(true);
						fechar.setEnabled(true);
						limpar.setEnabled(true);

						//
						// <<<<< Comando para Alteração = MERGE >>>>>
						//
						// em1.merge(film);
						//em1.getTransaction().commit();

						//	JOptionPane.showMessageDialog(null, "Cadastro efetuado com sucesso!");

					} else {
						JOptionPane.showMessageDialog(null, "Cliente não cadastrado!");
						cod_cli.requestFocus();
					}
				}
			}
		} // fim do new ActionListener
				);

Código da tabela Grid

private void buscarAction() {
		TableModelLocacao modelLocacao = (TableModelLocacao) tabela.getModel();

		List<filme_locadora> filme_locadora;

		filme_locadora = buscarFilmePorParametros(Integer.parseInt(cod_filme.getText()), titulo.getText());

		if (filme_locadora != null && !filme_locadora.isEmpty()) {

			for (filme_locadora filme_locadora2 : filme_locadora) {
				modelLocacao.addItem(filme_locadora2);
				JOptionPane.showMessageDialog(null, " código do filme!" + cod_filme);
			}

			tabela.setRowSelectionInterval(0, 0);
			tabela.requestFocus();
		} else {
			JOptionPane.showMessageDialog(null, "Cai no else!");
			quantidade.requestFocus();
		}

		double valor_final = 0;
		// double desconto= Double.parseDuble(desconto.getText());
		//     valor_final= valor_final+valortotal;

	}

	public void focusGained(final FocusEvent arg0) {
		// TODO Auto-generated method stub

	}

	@SuppressWarnings("unchecked")
	public List<filme_locadora> buscarFilmePorParametros(Integer cod_filme, String titulo) {

		List<filme_locadora> filme = new ArrayList<filme_locadora>();

		StringBuilder jpql = new StringBuilder("SELECT p FROM filme_locadora p WHERE p.cod_filme IS NOT NULL");//("SELECT p FROM cliente_locadora p WHERE p.cod_cli = ? OR p.nome_cli LIKE ?" );

		if (cod_filme != null && !cod_filme.equals("")) {
			jpql.append(" AND p.cod_filme = " + cod_filme);

		}

		else {
			JOptionPane.showMessageDialog(null, "Entrei no String!");
			jpql.append(" AND p.titulo =" + titulo);

		}

		try {
			EntityManager em = f.createEntityManager();
			Query query = em.createQuery(jpql.toString());
			filme = query.getResultList();
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, "Cai no erro!");
			e.printStackTrace();
		}

		///atualizando valor total
		for (filme_locadora filme1 : filme) {

			double valor = Double.parseDouble(valorf.getText().replace(',', '.'));
			valortotal = valortotal + valor;
			valor_total.setText(String.valueOf(valortotal));

		}

		return filme;

	}

[b]Alguma idéia, desde já agradeço…

E

Galera, consegui resolver mudando o for dentro do meu cadastrar. segue aí a correção

for (filme_locadora filme_locadora : filmes) {

									EntityManager em2 = f.createEntityManager();

									filmes_locados f = new filmes_locados();

									f.setCod_cli(Integer.parseInt(cod_cli.getText().trim()));
									f.setCod_filme(filme_locadora.getCod_filme());
									f.setTitulo(filme_locadora.getTitulo());
									em.getTransaction().begin();
									em.persist(f);

									em.getTransaction().commit();

									// atualizando o estoque

									int cod = filme_locadora.getCod_filme();

									film = em1.find(filme_locadora.class, cod);

									if (!cod_filme.getText().trim().equals("")) {

										if (film != null) {

											int quant = Integer.parseInt(quantidade.getText().trim());
											int quant1 = film.getQtde_total();

											int calc = quant1 - quant;

											film.setQtde_total(calc);

											em1.getTransaction().begin();
											em1.persist(film);

											em1.getTransaction().commit();

										}
									}

								}

Vlw

Criado 3 de dezembro de 2009
Ultima resposta 3 de dez. de 2009
Respostas 2
Participantes 1