Merge JPA

4 respostas
V

Pessoal,

Alguém sabe dizer se isso funciona como update, utilizando JPA ?

public void updateEntity(Pessoa entity) {
		EntityManager manager = factory.createEntityManager(); 
		manager.getTransaction().begin();
		manager.merge(entity);
		manager.getTransaction().commit();
		manager.close();	
	}

Abraços

4 Respostas

fabiofalci

http://stackoverflow.com/questions/1069992/jpa-entitymanager-why-use-persist-over-merge

V

fabiofalci, valeu pela resposta rápida.

O código acima tem funcionado nos meus testes, mas não tenho muita certeza se funciona para todos os casos. Estou estudando o exato comportamento do merge.
Como objeto que o método recebe como parametro está sempre desligado do contexto de persistência e com o identificador definido, entendo que o merge faz o update.

Vi este artigo tb que explica bem o funcionamento do merge (inclusive com uma tabela comparativa com persist e saveOrUpdate do Hibernate) : http://blog.xebia.com/2009/03/23/jpa-implementation-patterns-saving-detached-entities/

Esse aqui também é interessante: http://www.stevideter.com/2008/12/07/saveorupdate-versus-merge-in-hibernate/

Está me parecendo que o merge() é bom de ser utilizado em situações específicas, não em um método update genérico.

Andre_Brito

Para quais casos não funcionaria?

Acho que foi na documentação do Hibernate que o merge é o novo saveOrUpdate. Esses dias tentei usar o saveOrUpdate e nem consegui usar o ‘bind’ do teclado no Eclipse :expressionless:

V

Andre,

Havia criado o merge em um método update. Entretanto, pelo que estou entendendo, ele só funciona como update se:
-> Estiver o objeto estiver desacoplado do contexto de persistência E
-> Possuir um identificador único.

O merge(), embora possa ter um comportamento parecido com o saveOrUpdate() do Hibernate, não é exatamente igual. O ultimo artigo que passei no post anterior fala exatamente destas diferenças. E o outro mostra o comportamento do merge() em situações diversas.

Abs,

Criado 2 de dezembro de 2009
Ultima resposta 3 de dez. de 2009
Respostas 4
Participantes 3