Questão nº 19
Questão de Arquitetura de Desenvolvimento de Software · FGV SEFAZ-AM 2022 - Prova II (nº 19)
O Hibernate, versão 6, é um framework que oferece mecanismos para armazenamento e recuperação de objetos Java por meio de mapeamento objeto-relacional.
Em relação a interface Session, que oferece operações sobre instâncias de classes de entidade mapeadas, assinale a afirmativa correta.
- AUma instância transiente pode se tornar persistente chamando o método detach (Object object).
- BQualquer instância retornada pelo método get (String entityName, Object id) é persistente. (alternativa correta)
- CUma instância persistente pode se tornar transiente por meio do método merge (T object).
- DTodas as instâncias persistentes são marcadas para remoção chamando o método flush().
- EO estado original das instâncias gerenciadas é carregado na memória chamando o método reload().
Resposta comentada
Gabarito Alternativa B
Hibernate gerencia objetos Java mapeados para o banco de dados, e esses objetos podem ter três estados principais: transiente (novo, não associado à sessão), persistente (associado à sessão e monitorado) e detached (já foi persistente, mas não está mais associado à sessão).
- (A) Incorreta: O método
detach()remove um objeto do estado persistente, tornando-o detached; ele não o torna persistente a partir de um estado transiente. A armadilha aqui é confundirdetachcom operações que tornam um objeto persistente, comosave()oupersist(). - (B) Correta: O método
get()carrega um objeto do banco de dados (se ele existir) e o associa àSessionatual, colocando-o no estado persistente, onde suas alterações são monitoradas pelo Hibernate. - (C) Incorreta: O método
merge()é usado para reassociar um objeto detached (ou criar um novo persistente a partir de um transiente) com aSession, retornando uma nova instância persistente; ele não torna um objeto transiente. - (D) Incorreta: O método
flush()sincroniza as alterações pendentes daSession(inserções, atualizações, exclusões) com o banco de dados, executando as operações SQL; ele não marca objetos para remoção, para isso usa-sedelete(). - (E) Incorreta: O método
reload()(ourefresh()) atualiza o estado de um objeto persistente naSessioncom os dados mais recentes do banco de dados, descartando quaisquer alterações não salvas naSession; ele não carrega um "estado original" histórico, mas sim o estado atual do banco de dados.
Fonte: FGV SEFAZ-AM 2022 - Prova II Analista de Tecnologia da Informação da Fazenda Estadual (Caderno Tipo 1). Reproduzida para fins de estudo.