5
respostas

Método merge()

Minha dúvida é: Se o método merge() devolve uma nova referência para o objeto que estava no estado Detached, significa que ele fez uma cópia do objeto e teremos então dois objetos com mesmas características (porém com referências distintas) instanciados?

5 respostas

Fala Jorge de boa? Sim, dois objetos com os mesmos dados. Porém apenas o retorno do método merge estaria no estado managed, e apenas as alterações feitas nele poderiam resultar em futuros updates no banco.

Entendi Andrew, de boa e vc? ... Num sistema que faz transações com milhares de objetos isso poderia ser ruim né? Falando do ponto de vista de performance... Tenho outra pergunta, você saberia me dizer se o garbage collector trabalha limpando esses objetos não utilizados?

De boa...

Sobre o Garbage collector eu sei que:

Categoria celular = new Categoria(); // linha 1
//set
celular = em.merge(celular);

O Garbage collector provavelmente vai coletar essa instancia na linha 1.

Categoria celular = new Categoria(); // linha 1
//set
Categoria novaCategoria = em.merge(celular);

Nesse caso eu não tenho certeza se ele vai coletar essa linha 1, fica até a dúvida ai para os professores da alura responderem.

É cara, faz sentido mesmo o garbage collector limpar todo objeto que virou "lixo", seria um problema de projeto muito explícito... Vou deixar o tópico aberto e esperar alguém explicar melhor essa parte. Valeu amigo!

Ola Jorge tudo tranquilo? Essa mesma pergunta foi respondida aqui https://cursos.alura.com.br/forum/topico-jpql-com-like-202187 Será que consegue sanar sua duvida? abraços