Estados JPA - Dúvidas quanto ao uso do .merge

4 respostas
dreampeppers99

Há algum problema em sempre que for alterar um registro, realizar um merge antes de persistir?
E se o mesmo (a entidade) já estiver em outro estado que não Detached?

public void alterar(T obj) { obj = (T)gerenciadorDeEntidades.merge(obj); gerenciadorDeEntidades.persist(obj); }

Ou mesmo uma forma de capturar quando um objeto está Detached?
Como seria uma solução (ou as) melhor para tal?

Desde já obrigado!

4 Respostas

vhuzalo

o próprio método merge() já atualiza o registro do bd, o que vc precisa fazer é dar um commit desta forma:

public void alterar(T obj){
    gerenciadorDeEntidades.getTransaction().begin();
    gerenciadorDeEntidades.merge(obj);
    gerenciadorDeEntidades.getTransaction().commit();
}

:thumbup:

dreampeppers99

vhuzalo muito obrigado!!!

Mas posso sempre usar este método? mesmo que a entidade não esteja num estado desatachado?

vhuzalo

O merge funciona sim a qualquer momento, mesmo que o objeto esteja não esteja no contexto de persistência atual, ele busca o objeto, compara com o que está no banco e atualiza, mas não grava, por isto precisa do commit.

:thumbup:

dreampeppers99

Muito obrigado!!!

E quanto ao remove… não é necessário usar o merge?

Criado 19 de setembro de 2007
Ultima resposta 19 de set. de 2007
Respostas 4
Participantes 2