Questão FC373652
Em uma aplicação Java web que utiliza o Hibernate, um programador deseja adicionar uma nova instância de entidade ao contexto de persistência e, para isso, digitou o fragmento de c
Frameworks para Desenvolvimento
FCC · 2019
Em uma aplicação Java web que utiliza o Hibernate, um programador deseja adicionar uma nova instância de entidade ao contexto de persistência e, para isso, digitou o fragmento de código abaixo em um ambiente ideal.
Contribuinte contribuinte = new Contribuinte();
contribuinte.setNome("Maria da Silva");
session.persist(contribuinte) ;
Nesse trecho de código o objeto contribuinte
- foi salvo no banco de dados, pois a instância do objeto já estava em estado transient, ou seja, havia uma conexão estabelecida com o banco de dados.
- ainda não foi salvo no banco de dados, pois o método persist apenas torna o objeto persistente, necessitando obrigatoriamente de uma chamada ao método save na sequência para salvar o objeto.
- ainda não foi salvo no banco de dados, pois a geração de instruções INSERT ocorrerá somente após um commit da transação, flush ou fechamento da sessão.
- mudou para o estado detached e foi salvo no banco, uma vez que o método persist já executa o comando INSERT automaticamente para objetos neste estado.
- será descartado, pois o objeto não foi colocado no estado transient, ou seja, não está associado à sessão e, por isso, não poderá ser salvo no banco de dados.
Mostrar resposta e comentário
Gabarito
Certo
Comentário do professor
Ao chamar session.persist(contribuinte), o objeto passa a ser gerenciado pelo contexto de persistência (estado persistente) e fica registrado para inserção no banco.
No entanto, o Hibernate normalmente adia a emissão do comando SQL INSERT até que o contexto seja sincronizado com o banco: isso ocorre em um flush explícito, no commit da transação ou no fechamento da sessão.
Até esse momento não há garantia de que a linha já exista no banco: se a transação for revertida (rollback) antes do commit, a inserção não acontecerá.
Portanto, apesar de o objeto estar associado ao contexto, ele ainda não foi gravado fisicamente no banco até o flush/commit/close.
Conteúdo do catálogo FC Concursos · Atualizado em