Ele roda mas não deleta, já coloquei o flush e tb nada… aparenta q tá tudo ok!, o nome passado existe no banco, não tem espaços em brancos a mais, não é chave primária, tentei passar pela chave, mas nem pela chave remove tb.
[code]public void removerRegistro(String nome)
{
factory = Persistence.createEntityManagerFactory("exfuncionarios");
manager = factory.createEntityManager();
System.out.print("Excluindo registro… ");
EntityTransaction tx = manager.getTransaction();
tx.begin();
try
{
Cadastro cadastro = new Cadastro();
cadastro.setNome(nome);
Cadastro cad = merge(cadastro);
manager.remove(cad);
tx.commit();
// manager.flush();
System.out.println("OK");
manager.close();
factory.close();
}
catch (RuntimeException e)
{
e.printStackTrace();
tx.rollback();
}
}[/code]
O que você ta querendo fazer nessas linhas?
Cadastro cadastro = new Cadastro();
cadastro.setNome(nome);
Cadastro cad = merge(cadastro);
Você tá querendo atualizar e depois excluir?
Você tem é que buscar usando find ou refresh.
Dessa maneira não vai funcionar.
To querendo remover… mas para eu remover não teria que acha o objeto primeiro??? passando o nome???
como ficaria o exemplo então??? quero remover… só tenho o nome do cara… não é chave primária, preciso fazer um find e buscar o objeto q no caso é o cadastro??? se sim, como faço isso.
Melhor, o código abaixo creio q seria o mais correto
[code] public void removerRegistro(Cadastro cadastro)
{
factory = Persistence.createEntityManagerFactory("exfuncionarios");
manager = factory.createEntityManager();
System.out.print("Excluindo registro… ");
EntityTransaction tx = manager.getTransaction();
tx.begin();
try
{
manager.remove(cadastro);
tx.commit();
System.out.println("OK");
manager.close();
factory.close();
}
catch (RuntimeException e)
{
e.printStackTrace();
tx.rollback();
}
}[/code]
Mas para eu mandar um objeto cadastro, teria que buscar ele já q teria somente o nome que não é uma chave. creio q o código abaixo não é o mais correto… é do modelo do de cima só que para busca, além disso dá erro
cadastroDAO.removerRegistro(cadastroDAO.recuperaRegistro("Vitor Hugo"));
O método find do entityManager só poder ser utilizado se você tiver uma pk.
Acho que utilizando o refresh dá certo.
Assim:
public void removerRegistro(Cadastro cadastro)
{
factory = Persistence.createEntityManagerFactory("exfuncionarios");
manager = factory.createEntityManager();
System.out.print("Excluindo registro... ");
EntityTransaction tx = manager.getTransaction();
tx.begin();
try
{
manager.refresh(cadastro); //Atualiza o objeto com os dados do banco, se tiver dois nomes iguais ou mais, ele pegará o primeiro.
manager.remove(cadastro);
tx.commit();
System.out.println("OK");
manager.close();
factory.close();
}
catch (RuntimeException e)
{
e.printStackTrace();
tx.rollback();
}
}