Problemas ao remover um Entity com o metodo remove do JPA
5 respostas
R
rafaelmeireles
Pessoal estou tentando rodar o exemplo simples de JSF com EJB3 e JPA(Implementação do Hibernate) no Glassfish, consigo realizar consultas com o metodo find, inserção com o persist, porem nao consigo remover com o metodo remove, toda vez que tento da o seguinte erro:
Ele fica reclamando de:
Caused by: java.lang.IllegalArgumentException: Removing a detached instance
Já tentei usar o merge para funcionar mais naum adianta, eu uso o find para recuperar o entity endereco e o objeto obtido com o find eu repasso para o remove.
já pesquisei na net mais não encontrei a solução, se alguem já tiver tido esse problema ou souber da solução agradeço, pois não sei mais o que tentar?
procure entender os estados de uma entidade gerenciada pelo EntityManager.
A maioria dos erros é porque o desenvolvedor não sabe o que é uma entidade detached ou managed…
R
rafaelmeireles
kartler valeu pela ajuda deu certo, porém gostaria de saber pq um objeto que é recuperado com o metodo find fica detached?
em findByPrimaryKey uso o find e em remove uso o remove
até onde sei não tem motivos para ele ficar detached, lembrando que esses codigos estão dentro de um managed bean do JSF.
Agradeço desde já se puderem explicar.
Muito provável seu EM de onde você retirou o objeto já ter sido fechado (Isso tira o objeto do contexto de persistencia), isso torna objeto detached… por isso ao você “Amarrar” novamente o seu objeto ao EM ele se torna reattach, executando assim em.remove(o) com sucesso.
R
rafaelmeireles1 like
isso eu já entendi, o que não entendi ainda é como funciona a politica para o fechamento do EntityManager, eu suspeito que como é via servidor de aplicação o Contexto de Persistencia tem escopo de transação, ai vem a pergunta, quando eu realizo um find ele conta isso como transação e ao final do find ele é fechado?