Jpa - diferençã do refresh para merge

1 resposta
E

Eu sei que o refresh atualiza o banco de dados, é o merge apenas sincroniza com o banco, mais esse “sincronizar” tbm atualiza.

pois eu faço assim

em.getTransaction().begin();
            em.merge(objeto);
            em.getTransaction().commit();

e atualiza o banco,

Então qual é a real diferença?

1 Resposta

maior_abandonado

ja que ninguém respondeu, eu vou responder as pequenas diferenças que encontrei, lendo no livro “enterprise javabeans 3.0”, paginas 53, 54 e 55.

Primeiro que se o objeto que você está usando não está sendo gerenciado pelo hibernate, o merge atualiza o banco com essas informações e cria um objeto gerenciado com cópia dos dados do objeto que você passou, retornando-o. (o objeto que você passou ainda não é gerenciado). Nessas condições o refresh retornaria uma IllegalArgumentException.

Outro detalhe é que o refresh não depende de um commit por exemplo para gravar de fato no banco (pelo que eu entendi), diferentemente do merge. O merge, persist ou remove são dependentes do FlushModeType (pagina 55).

Acredito que sejam só esses detalhes (que eu mesmo precisei confirmar no livro).

Criado 28 de março de 2011
Ultima resposta 28 de mar. de 2011
Respostas 1
Participantes 2