1
resposta

public void atualizar (Categoria categoria)

Na aula 3 de 04.Ciclo de vida de uma entidade do curso Persistência com Jpa, vimos que para atualizar uma entidade que está no estado Detached, primeiro, passamos esta entidade para o método merge(). A partida desse método, obtemos uma nova referência para este novo objeto. Após, alteramos o atributo desejado. Em seguida, sincronizamos com flush().Veja:

em.persist(celulares); celulares.setNome(“XPTO”);

em.flush(); em.clear();

celulares = em.merge(celulares); celulares.setNome(“1234”); em.flush();

No entanto, segundo explicação dada em aula, o método "public void atualizar (Categoria categoria)" é um método que recebe a entidade pronta, já alterada, ficando assim:

em.persist(celulares); celulares.setNome(“XPTO”);

em.flush(); em.clear();

celulares.setNome(“1234”)

Categoria Dao categoriaDao = new CategoriaDao; categoriaDao.atualizar(celulares); em.flush();

É isso mesmo, a jpa fará a alteração da entidade celulares para settar o nome para "1234"? Pois, o que aprendemos é que é a nova referência devolvida por em.merge é que deve ser alterada.

1 resposta

Olá Thiago,

Realmente, o método "public void atualizar (Categoria categoria)" recebe a entidade pronta e já alterada. Nesse caso, a JPA fará a alteração da entidade celulares para settar o nome para "1234".

No entanto, é importante lembrar que o método merge() é utilizado quando a entidade está no estado Detached, ou seja, quando ela não está mais gerenciada pela JPA. Nesse caso, o merge() retorna uma nova referência para a entidade gerenciada pela JPA, e é essa nova referência que deve ser alterada.

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