1
resposta

Retorno do merge() para o método atualizar da classe DAO - ainda não concordei

Este assunto está em dois ou três tópicos, mas ainda não consegui considerar solucionado.

Até concordo que o método atualizar(categoria) seja void, mas ainda não consegui concordar com que a chamada ao método merge() do jeito que está no curso irá "forçar o objeto a ficar no estado MANAGED", pois o merge() não faz isso.

Penso que deveria existir pelo menos aquela atribuição do retorno do merge() ao próprio objeto passado como parâmetro, assim:

categoria = this.em.merge(categoria)

Desta forma, como a passagem de parâmetros em Java é por referência, após a chamada ao atualizar(categoria), o objeto 'categoria' estará, aí sim, MANAGED e qualquer alteração será sincronizada no próximo flush() ou commit().

1 resposta

Olá! Compreendo sua dúvida em relação ao retorno do método merge() para o método atualizar da classe DAO. Realmente, o merge() não força o objeto a ficar no estado MANAGED, mas sim retorna uma nova instância gerenciada pelo EntityManager.

Sua sugestão de atribuir o retorno do merge() ao próprio objeto passado como parâmetro é uma boa prática, pois garante que o objeto esteja no estado MANAGED após a chamada do método atualizar().

Além disso, é importante lembrar que o método merge() é utilizado para atualizar um objeto que não está no estado MANAGED, e que o método atualizar() deve ser utilizado apenas para objetos que já estão no estado MANAGED.

Espero ter ajudado a esclarecer sua dúvida. Qualquer outra questão, fique à vontade para perguntar.

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software