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

Hibernate - Método persist

Com relação ao que foi ensinado na aula de gerenciamento de estados do curso de Hibernate, segue o seguinte código: manager.getTransaction().begin(); // manager.persist(conta); Conta conta = manager.find(Conta.class, 1); conta.setTitular("Joao"); System.out.println(conta.getTitular()); manager.getTransaction().commit(); manager.close(); Porque ao realizar a alteração, o Hibernate consegue realizar o update na tabela do banco de dados sem utilizar o métódo persist, já que de certa forma ele está realizando um "insert" ?

2 respostas

Na verdade nesse caso está sendo feito um Update no objeto conta e não um insert.

A não necessidade do persist, se entendi bem, é devido aos estados do EntityManager, vistos no capítulo anterior.

solução!

Thiago,

Como o Jackson disse, isso tem haver com o estado do objeto gerenciado pelo JPA (ciclo de vida). Um erro que muita gente comete é vincular o método persist da JPA com INSERT. Isso não é verdade. É verdade que ele geralmente realiza INSERT, mas isso não é exclusividade.

O persist passa o objeto para o estado Managed. Ou seja, você usa este método quando tem um objeto Transient (que acabou de criar com o operador new) ou quando você tem um objeto no estado *Removed e quer que ele volte a ser gerenciado pela JPA.

No seu exemplo, ele realiza um UPDATE por que você buscou um objeto no banco de dados ao usar o método find. Quando você busca este objeto, ele já vem no estado Managed. Dessa forma, qualquer alteração que você fizer, quando der commit na transação, a JPA irá sincronizar as informações com o banco de dados. Dessa forma, ele verá se fará um INSERT ou um UPDATE. Como você está alterando um valor que já existe no banco de dados, ele realiza o UPDATE e você não precisa chamar o método persist.