No contexto do Hibernate, considere a declaração a seguir. Estudante estudante= new Estudante(); É correto afirmar que o objeto estudante, ao longo da sua existência/utilização, pode estar em algum dos estados:
- A)Defined, Instanced e Latent;
Errada, porque esses termos não correspondem aos estados do ciclo de vida de uma entidade no Hibernate.
- B)Lazy, Eager e Restfull;
Errada, pois lazy e eager são estratégias de carregamento, e restfull não tem relação com Hibernate.
- C)On, Loaded e Off;
Errada, porque on, loaded e off não são nomenclaturas técnicas usadas para os estados de entidade no Hibernate.
- D)Open, Active e Closed;
Errada, pois open, active e closed podem lembrar contexto de sessão, mas não descrevem os estados da entidade.
- E)Transient, Persistent e Detached.
Certa, porque os estados clássicos do objeto no Hibernate são transient, persistent e detached.
Gabarito: E
No Hibernate, um objeto passa por estados de vida bem clássicos, e isso costuma cair muito em prova. Quando voce faz `Estudante estudante = new Estudante();`, o objeto acabou de nascer em memória e ainda não foi associado ao banco de dados nem à sessão do Hibernate. Esse é o ponto de partida para entender a diferença entre os estados do ciclo de vida da entidade. De forma simples, o estado transient ocorre quando o objeto foi criado com `new`, mas ainda não está sendo acompanhado pelo Hibernate. Ele não faz parte da sessão e não tem identidade persistida no banco. Se voce salvar esse objeto, ele pode passar a persistent, porque aí o Hibernate começa a monitorá-lo dentro da sessão aberta. Já o estado detached aparece quando o objeto já foi persistido em algum momento, mas saiu do contexto de persistência, por exemplo, porque a sessão foi fechada, limpa ou o objeto foi explicitamente evictado. Ele continua sendo um objeto Java válido, mas fora do radar do Hibernate. Essa é a trilha clássica ensinada na doutrina de JPA/Hibernate: transient, persistent e detached. Por isso o gabarito é a letra E. A banca quer exatamente os estados do ciclo de vida da entidade no Hibernate, e não rótulos soltos de internet. Aqui, o objeto `estudante` começa como transient; depois pode se tornar persistent quando associado à sessão; e, em algum momento, pode ficar detached ao sair do contexto de persistência.