Dúvida com o JPA

5 respostas
danielsudpr

Boa noite,
Minha dúvida é simples, quando persisto uma entidade no banco usando o EntityManager como eu faço para que a entidade salva seja retornada já com o ID?
Exemplo:

EntityManager em = null;
em = JpaUtil.getHibernateEntityManager();
em.getTransaction().begin();
em.merge(entity);
em.getTransaction().commit();

o problem é que após o commit o entity.getId() e eu gostaria que tivesse com o id que acabou de ser salvo está nulo.

PS: eu nao uso persist porque existem elementos dentro da entidade que já estao salvos.

5 Respostas

RaulCarlin

Não entendi, se já tem coisa salva, como é que não tem o ID?

danielsudpr

Quando eu salvo um Aluno dentro dele tem uma associacao com a entidade Pessoa que pode ou não existir no momento em que eu insiro o Aluno.
Se eu tentar fazer um em.persist(aluno) e a pessoa já existir vai dar um erro por isso eu uso o em.merge(aluno).
E eu gostaria de que ao final do metodo salvar fosse retornado o aluno.

S

Não sei se entendi direito sua dúvida, mas o merge retorna a entidade.
http://java.sun.com/javaee/5/docs/api/javax/persistence/EntityManager.html#merge(T)

D

exatamente… o merge retorna a entidade persistida.

tenta assim

EntityManager em = null;
em = JpaUtil.getHibernateEntityManager();
em.getTransaction().begin();

// retorna a entidade persistida, já com o id gerado pelo JPA
entity = em.merge(entity);

em.getTransaction().commit();
danielsudpr

Verdade, disfarça!
Vlws. 8)

Criado 10 de julho de 2008
Ultima resposta 11 de jul. de 2008
Respostas 5
Participantes 4