FC ConcursosFC Concursos

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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

Continue aprendendo