JPA persist e merge

Qual seria a diferenca entre persist() e merge() ??
E em cascata ??

Obrigado !

Persist - Torna uma instância persistente (gera um insert quando o contexto transacional for flusheado)

Merge - Re-sincroniza uma instância desatachada do contexto (serve para você reanexar uma instância que passeou fora do contexto transacional corrente).

Tente compreender como o contexto transacional funciona (o session do hibernate ou o EntityManager da JPA). Não crie na sua cabeça a falsa ilusão que um persist é um INSERT e nem que um MERGE é um update.

1 curtida

Apenas uma observação e corriga-me se estiver errado.

Não sei exatamente como funciona com JPA mas um merge no Hibernate não re-anexa o objeto ao cache de primeiro nivel, apenas sincroniza as informações do objeto com o banco de dados.

Em JPA funciona da mesma forma?

O que coloquei foi conceitual. Para falar a verdade, o merge deixa a instância passada do jeito que ela está, pois o merge não tem efeito colateral, mas o merge RETORNA a instância reanexada. Desculpe a falha.