O que tá errado no código JPA?

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();
         }
      }