[quote]Olá pessoal,
Tenho um CRUD em JDBC funcional 100% com Postgres, mas ao tentar migrá-lo para Hibernate o método salvar não está 100% como deveria. Isso acontece quando no Form se marca um JCheckBox para indicar ao programa que aquele registro será salvo com repetição, tipo por mais "Y" vezes (Exe: salva o registro1 original, com a data = 01/01/2011, e caso marcado o JCheckBox irá repetí-lo por mais 2 meses, ficando: registro2 = 01/02/2011 e registro3 = 01/03/2011 )
Abaixo o código funcional em JDBC que consegue salvar todos os registros no banco:
public void salvar() {
try {
Registro registro = new Registro();
if (RB_Despesa.isSelected()) {
registro.setTipo("Despesa");
} else {
registro.setTipo("Receita");
}
registro.setCategoria(CB_Categoria.getSelectedItem().toString());
registro.setValor(Float.parseFloat(TF_Valor.getText()));
registro.setProduto(TF_Produto.getText());
registro.setComentario(TF_Comentario.getText());
registro.setData(TF_Data.getText().toString());
registroDao.incluirRegistro(registro);
//System.out.println(registro.getData());
if (CheckBox_Repetir.isSelected()) {
calculaRepetirPeriodo(registro);
}
calculaBalanco();
} catch (Exception e) {
JOptionPane.showMessageDialog(this, e.getMessage());
}
}
public void incluirRegistro(Registro registro) {
Connection conexao = ConexaoPostGreSQL.getConnection();
try {
String comando = "insert into " + tabela + " (valor, categoria, tipo, produto, comentario, data) values (?, ?, ?, ?, ?, ?)";
PreparedStatement statement = conexao.prepareStatement(comando);
statement.setDouble(1, registro.getValor());
statement.setString(2, registro.getCategoria());
statement.setString(3, registro.getTipo());
statement.setString(4, registro.getProduto());
statement.setString(5, registro.getComentario());
statement.setString(6, registro.getData());
statement.executeUpdate();
JOptionPane.showMessageDialog(null, "Registro INSERIDO no banco de dados !");
} catch (SQLException e){
JOptionPane.showMessageDialog(null, "Use . (ponto) para inserir casas decimais");
} finally {
try {
conexao.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
Quando tentei migrar para Hibernate, o código incluirRegistro ficou assim:
public void incluirRegistro(Registro registro) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA_UP");
EntityManager em = emf.createEntityManager();
try {
em.getTransaction().begin();
//em.refresh(registro);
em.persist(registro);
//em.flush();
em.getTransaction().commit();
JOptionPane.showMessageDialog(null, "Registro INSERIDO no banco de dados !");
} finally {
try {
} catch (Exception e) {
em.getTransaction().rollback();
e.printStackTrace();
}
}
}
E aqui há o laço de repetição que chama o método incluirRegistro, caso o JCheckBox_Repetir seja marcado para repetir "Y" vezes:
public void calculaRepetirPeriodo(Registro registro) {
for (Integer contador = 1; contador <= vezes; contador++) {
String dataOriginal = registro.getData();
//chamaMetodoQueCalculaNovaData
registroDao.incluirRegistro(registro);
}
}
O método salvar permaneceu inalterado. Só que agora ele está salvando somente o último registro no banco (no exemplo, o registro3 01/03/2011 mencionado antes).
Alguém sabe me dizer por quê? Tentei usar o flush e o refresh, conforme comentários, mas sem sucesso. :roll: