Os três estados de objeto definidos pelo framework Hibernate...
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a letra D, a qual afirma que os três estados de objeto definidos pelo framework Hibernate são: Transiente (Transient), Persistente (Persistent) e Destacado (Detached). Vamos entender o que cada um desses estados significa dentro do contexto do Hibernate:
- Transiente: O estado transiente se refere a um objeto que foi instanciado, mas ainda não está associado a uma sessão do Hibernate e não foi salvo no banco de dados. Tais objetos são apenas instâncias comuns da classe até que sejam persistidos ou associados a uma sessão.
- Persistente: Um objeto é considerado persistente quando está associado a uma sessão do Hibernate e há uma representação correspondente no banco de dados. Qualquer mudança feita nesses objetos será persistida no banco assim que a sessão for encerrada ou quando a transação for commitada.
- Destacado: O estado destacado acontece quando um objeto persistente é dissociado de uma sessão do Hibernate, geralmente após o fechamento da sessão ou um commit de transação. Apesar de já ter uma representação no banco de dados, o objeto não está mais sob gerenciamento de uma sessão ativa, o que significa que alterações no objeto não serão automaticamente persistidas.
Compreender esses estados é fundamental para gerenciar o ciclo de vida dos objetos de maneira eficiente ao trabalhar com o Hibernate. Isso ajuda a evitar problemas comuns como duplicação de dados ou erros de persistência, garantindo que os objetos sejam manipulados de forma adequada no banco de dados.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
O Hibernate define e suporta os seguintes estados de objetos:
Transient - um objeto é transiente se ele foi instanciando usando apenas o operador new e não foi associado a uma Session do Hibernate. Ele não possui uma representação persistente no banco de dados e não lhe foi atribuído nenhum identificador. Instâncias transientes serão destruídas pelo coletor de lixo se a aplicação não mantiver sua referência. Use uma Session do Hibernate para tornar o objeto persistente (e deixe o Hibernate gerenciar as instruções SQL que serão necessárias para executar esta transição).
Persistent - uma instância persistente possui uma representação no banco de dados e um identificador. Ela pode ter sido salva ou carregada, portanto ela se encontra no escopo de uma Session. O Hibernate irá detectar qualquer mudança feita a um objeto persistente e sincronizar o seu estado com o banco de dados quando completar a unidade de trabalho. Desenvolvedores não executam instruções manuais de UPDATE, ou instruções de DELETE quando o objeto se tornar transiente.
Detached – uma instância desanexada é um objeto que foi persistido, mas sua Session foi fechada. A referência ao objeto continua válida, é claro, e a instância desanexada pode ser acoplada a uma nova Session no futuro, tornando-o novamente persistente (e todas as modificações sofridas). Essa característica habilita um modelo de programação para unidades de trabalho de longa execução, que requeira um tempo de espera do usuário. Podemos chamá-las de transações da aplicação, ou seja, uma unidade de trabalho do ponto de vista do usuário.
ALTERNATIVA D
Conforme mostra o diagrama de estado ao lado, temos os estados TRANSIENTE, PERSISTENT e DETACHED.
Objetos que estão no estado TRANSIENT foram instanciados (new) e nunca estiveram associados a algum contexto persistente. Se eles forem destruídos (garbage), não poderão ser recuperados.
Objetos que se associam a um contexto persitente, passam a ter uma identidade no banco de dados, esse é o estado PERSISTENT.
DETACHED são objetos que estavam associados a uma sessão que foi fechada, eles então podem estar desatualizados em relação ao que foi persistido no BD. Quando essa atualização acontece ( update()/saveOrUpdate() ) eles se tornam novamente PERSISTENT.
Objetos TRANSIENT e DETACHED podem ser coletados para a destruição.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo