Qual seria a diferenca entre persist() e merge() ??
E em cascata ??
Obrigado !
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.
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.