Bom dia a todos,
Eu tenho a seguinte tabela:
TABELA : ASUSUARIO
ATRIBUTO: ID_USUARIO varchar2(10)
ATRIBUTO: NOME varchar2(10)
Sabemos que para a exclusão de registros usando JPA devemos sempre passar o ID da Entity como mostra o modelo abaixo:
public boolean remove(Class pClassObj, long pId) {
try {
em = FactoryConnection.getEntityManager();
em.getTransaction().begin();
em.remove(em.find(pClassObj, pId));
em.getTransaction().commit();
return true;
} catch (Exception ex) {
ex.printStackTrace();
return false;
} finally {
FactoryConnection.closeEm();
}
}
O método acima ( E que funciona ) é chamado da seguinte forma:
// Instancio o usuario com o id teste
AsUsuario usuario = buscaUsuario("teste");
// Agora vou remover o danado.
dao.remove(usuario.getClass(),usuario.getIdUsuario);
Notem que mesmo o meu id sendo uma String o metódo funciona perfeitamente. Exclui o registro do banco. Bom, gostaria de tornar isso mais dinamico e não sei se isso é possivel e por isso criei este post. Gostaria de fazer algo do tipo:
public boolean remove(Object obj) {
try {
em = FactoryConnection.getEntityManager();
em.getTransaction().begin();
em.remove(em.find(obj.getClass(), obj.getClass().getId)); //<- Tentativa 1 - Não existe isso rs
em.remove(obj.getClass()); // <- Tentativa 2 - Não funciona .. disse que eu tenho que passar um ID
em.remove(em.find(obj.getClass(),19L)); // <- Tentativa 3 - Funciona, mas disse que o ID recebido foi uma String e o esperado é um long
em.getTransaction().commit();
return true;
} catch (Exception ex) {
ex.printStackTrace();
return false;
} finally {
FactoryConnection.closeEm();
}
}
Em resumo, gostaria de passar para o metodo remove um objeto já com a instancia correta e gostaria que ele pudesse excluir sem que o id fosse informado, ou então descobrir uma forma de encontrar o ID do objeto de forma dinamica. O Insert, Update já funciona… meu problema está com o delete.
O objeto a ser passado para o metodo remove seria:
String nomeClasse = "br.com.estudo.model.AsUsuario";
Object objPersistir = Class.forName(nomeClasse).newInstance();
iterator = listDeleted.iterator(); // Lista de Objetos AsUsuario.
while ( iterator.hasNext()){
objPersistir = iterator.next();
dao.remove(objPersistir);
}
