Duvida sobre persistência Hibernate

4 respostas
Dayson_Rodrigues

Estou aprendendo Hibernate com JPA e escou com pequenas duvida.

Qual a diferença do merge e find?

4 Respostas

peczenyj

toda a diferença.

find vc encontra um objeto

merge vc vai salvar ou atualizar o objeto

Dayson_Rodrigues

Hum… show de bola então. Para usar o merge preciso tem o objeto no banco para fazer as modificações necessaria correto?

peczenyj

Vc leu a documentação?

Merge cria o objeto se não encontrar.

De uma olhada no .persist tb

G

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

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