Estou aprendendo Hibernate com JPA e escou com pequenas duvida.
Qual a diferença do merge e find?
Estou aprendendo Hibernate com JPA e escou com pequenas duvida.
Qual a diferença do merge e find?
toda a diferença.
find vc encontra um objeto
merge vc vai salvar ou atualizar o objeto
Hum… show de bola então. Para usar o merge preciso tem o objeto no banco para fazer as modificações necessaria correto?
Vc leu a documentação?
Merge cria o objeto se não encontrar.
De uma olhada no .persist tb
segundo a documentação,
o .persist irá persistir e adicionar a entidade ao contexto.
o .merge irá copiar o estado da entidade coloca-la no contexto para então retornar a mesma, ou seja, a instancia que você passou para o merge não é gerenciada pelo EntityManager, mas a instancia que retornou do merge sim.
veja as assinaturas:
<T> T merge(T entity)
void persist(Object entity)
isso pode render alguns cenários:
Entidade e = new Entidade();
// inicio da transação
em.persist(e);
e.setValor(valor);
// fim da transação
o valor nesse caso é alterado no banco de dados
Entidade e = new Entidade();
// inicio da transação
em.merge(e);
e.setValor(valor);
// fim da transação
o valor nesse caso não é alterado no banco de dados
// inicio da transação
Entidade outra = em.merge(e);
outra.setValor(valor);
// fim da transação
o valor nesse caso é alterado no banco de dados