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…