Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Retorno do merge() para o método atualizar da classe DAO

Vi que já foram criados dois tópicos sobre este assunto, mas a resposta não foi satisfatória sobre deixar o método atualizar da classe DAO como void.

No vídeo (aproximadamente 5:58) o instrutor diz que o método merge não altera o estado do objeto recebido como parâmetro (que continua detached), então o método atualizar também não vai ter efeito nenhum se não retornar o objeto managed. Ou o objetivo do método atualizar é outro?

3 respostas
solução!

Oi Fernanda,

Dentro de uma classe Dao o método atualizar geralmente é void, pois sua responsabilidade será apenas pegar o objeto que chega como parâmetro(que geralmente vem no estado Detached) já com os novas informações setadas e apenas força-lo a ficar no estado managed ,via método merge, para assim que a transação for commitada o update com as novas informações ser disparado no banco de dados.

Ou seja, esse objeto não será manipulado posteriormente pela aplicação, então não precisa ser retornado.

Bons estudos!

Oi Rodrigo,

OK, mas só para esclarecer o funcionamento, chamar o método atualizar não deixa o objeto recebido como managed, correto? Ele cria um outro objeto managed que vai causar o update por estar com os dados atualizados, mas que não será guardado. Ou seja, se eu setar outro campo no objeto original depois de chamar o método atualizar, não vai ser feito nenhum outro update (considerando que ele já estivesse detached). Imagino que seja uma boa prática exigir que o objeto DAO sempre seja acionado depois das atualizações para não precisar ficar controlando se o objeto está managed ou não.

Isso mesmo Fernanda!

O comum é ter o objeto detached com todas as informações que precisam ser atualizadas setadas e após isso chamar o atualizar da classe Dao, apenas para disparar o update no banco, não mexendo mais no objeto após isso.