4
respostas

Por que não o Merge(x)?

Bom Dia!

Na vídeo aula "testando os relacionamentos entre categoria, conta e movimentação" eu tive a dúvida sobre do motivo de eu não conseguir utilizar o merge ao invés do find. A movimentação já estava no banco e eu gostaria de reutilizá-la, acreditei que deveria funcionar.

4 respostas

Oi Michael, tudo bem ?

O Merge serve para gente deixar o estado do objeto como gerenciado ( managed ), ai nesse caso ele até consegue fazer os updates e tudo mais.

O Find serve para gente fazer uma busca e o resultado já é gerenciado peloa jpa.

Opa, Matheus, tudo tranquilo!

Então eu teria que setar um id para o objeto movimentação, utilizar o merge para deixá-lo managed e depois alterar os dados? Como ficaria o código? Ou eu não consigo utilizar o merge de forma alguma nesse caso? Não faz sentido para mim não conseguir utilizar o merge aí haja vista que eu tenho um objteto detached e o merge serve para deixá-lo managed.

O uso do find está entendido.

Oi Michael,

Então se você quiser uma movimentação você vai precisar fazer a busca dela no banco de qualquer forma, nesse caso ela já vai estar gerenciada e ai você alterando, ele já fará os updates na base.

Da forma que você disse poderia ser feito, o "problema" dessa abordagem é que você pode perder informações.

Realmente fiz um teste e os dados do id específico se perderam. Acredito que por mescar com uma conta que eu havia acabado de criar e não possuía informação nenhuma, não é?

Movimentacao mov6 = new Movimentacao();

mov6.setId(6);

em.merge(mov6);

mov6.setValor(new BigDecimal("450.0"));