Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

"org.hibernate.PersistentObjectException; detached entity passed to persist"

Olá,

Estava brincando com o código da aula 2 e resolvi adicionar outro banco de dados, persistindo a "conta" em ambos, apesar de eles serem adicionados a ambos os bancos, o programa sempre me devolve essa exception.:

"org.hibernate.PersistentObjectException; detached entity passed to persist"

Alguém sabe o que poderia ser ? Obrigado

1 resposta
solução!

Oi César,

Você deve estar utilizando 2 EntityManagers, e acredito que tenha um código parecido com:

Conta conta = new Conta();
//preenche os dados da conta

EntityManagerFactory emf =  Persistence.createEntityManagerFactory("factory1");
EntityManager em = emf.createEntityManager();

EntityManagerFactory emf2 =  Persistence.createEntityManagerFactory("factory2");
EntityManager em2 = emf.createEntityManager();

em.getTransaction().begin();
em.persist(conta);
em.getTransaction().commit();

em2.getTransaction().begin();
em2.persist(conta);
em2.getTransaction().commit();

em.close();
emf.close();
em2.close();
emf2.close();

O problema acontece pois quando você passa o objeto conta para o método persist do primeiro EntityManager, esse objeto passa a ser gerenciado pela JPA e terá um ID gerado pelo banco de dados.

Quando você passa o mesmo objeto para o segundo EntityManager, a JPA detecta que o objeto está sendo gerenciado e já possui um id, sendo que isso não deveria ocorrer, pois o método persist deve ser utilizado apenas para objetos que não possuem id e não estão sendo gerenciados ainda.

O ideal nesse caso seria ter dois objetos distintos, onde cada EntityManager trabalhará com um deles, de maneira isolada um do outro.

Bons estudos!