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.
- A)Uma instância transiente pode se tornar persistente chamando o método detach (Object object).
Errada: detach desassocia a entidade da Session, não a torna persistente.
- B)Qualquer instância retornada pelo método get (String entityName, Object id) é persistente.
Certa: o get retorna uma entidade associada à Session, portanto persistente/gerenciada, se o registro existir.
- C)Uma instância persistente pode se tornar transiente por meio do método merge (T object).
Errada: merge recupera o estado de um objeto e o copia para uma instância gerenciada, não torna a instância persistente transiente.
- D)Todas as instâncias persistentes são marcadas para remoção chamando o método flush().
Errada: flush sincroniza o contexto de persistência com o banco, não marca entidades para remoção.
- E)O estado original das instâncias gerenciadas é carregado na memória chamando o método reload().
Errada: o método usado para recarregar o estado da entidade é refresh, não reload.
Gabarito: B
No Hibernate, a interface Session representa a porta de entrada para operar com entidades mapeadas. O ponto principal aqui é entender os estados do objeto: transiente, persistente (gerenciado), detached e removido. Muitos erros de prova nascem justamente de confundir um verbo com o efeito dele, porque a banca troca os métodos como se fossem cartas de baralho. O método get(String entityName, Object id) busca a entidade pelo identificador e, se ela existir, devolve uma instância associada à Session, ou seja, uma instância persistente enquanto estiver vinculada ao contexto de persistência. Se não encontrar, retorna null. É por isso que a alternativa B está correta: o objeto retornado pelo get não é transiente nem detached, mas sim gerenciado pela Session. Já detach, merge, flush e refresh têm papéis bem diferentes. detach faz o contrário do que a alternativa A sugere: ele desassocia a instância da Session. merge copia o estado de um objeto para um contexto persistente, mas não transforma a própria instância em transiente. flush apenas sincroniza mudanças com o banco, sem marcar entidades para remoção. E o nome correto para recarregar o estado da entidade é refresh, não reload. Em prova, a ideia central é esta: get carrega e entrega uma entidade gerenciada, enquanto os outros métodos servem para desassociar, copiar estado, sincronizar ou recarregar. Se você lembrar dessa trilha, a pegadinha perde a graça.