← Questões de Programação

Programação · FGV · 2023

Questão comentada de Programação

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:

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.

Continue treinando

Questões relacionadas