Pular para o conteúdo principal

Questão de Engenharia de Software — Desenvolvimento de Software — VUNESP 2023

Engenharia de SoftwareDesenvolvimento de Software
Código
vu073325
Banca
VUNESP
Órgão
DPE-SP
Ano
2023
Nível
Superior
Cargo
Agente de Defensoria - Analista Desenvolvedor
Em uma aplicação Java, foi encontrado o seguinte trecho de conteúdo no arquivo de mapeamento do framework Hibernate.Imagem associada para resolução da questãoAssinale a alternativa correta a respeito.
  1. AA classe Java Funcionario corresponde a um servlet (é derivada de HttpServlet), provendo chamadas para consultar e armazenar registros de funcionários em um banco de dados.
  2. BO schema do banco de dados utilizado deve possuir uma tabela chamada Funcionario para que instâncias da classe persistente de mesmo nome sejam armazenadas na forma de registros.
  3. CO Hibernate escolherá os algoritmos identity, sequence ou hilo para criar a chave primária na tabela de funcionários, dependendo das capacidades do servidor de banco de dados utilizado.
  4. DO fato de esse arquivo de mapeamento estar escrito em representação XML implica que o banco de dados subjacente deve ser do tipo Document-Based, ou seja, da categoria NoSQL.
  5. EA classe Func da aplicação Java está mapeada na tabela Func de um banco de dados relacional que provê persistência para a aplicação.
Revelar gabarito e comentário

GabaritoC — O Hibernate escolherá os algoritmos identity, sequence ou hilo para criar a chave primária na tabela de funcionários, dependendo das capacidades do servidor de banco de dados utilizado.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Mapeamento objeto-relacional com Hibernate

Gabarito: letra C. O Hibernate, ao mapear uma classe persistente para uma tabela de banco de dados relacional, pode gerar a chave primária utilizando diferentes estratégias de geração de identificadores, como identity, sequence e hilo, escolhendo a mais adequada conforme as capacidades do banco de dados subjacente. Essa é a essência do mapeamento objeto-relacional (ORM) que o Hibernate provê.

O Hibernate é um framework de mapeamento objeto-relacional (ORM) para a plataforma Java. Ele permite que o desenvolvedor trabalhe com objetos Java e o framework se encarrega de persistir esses objetos em um banco de dados relacional, criando uma ponte entre o paradigma orientado a objetos e o modelo relacional. O mapeamento pode ser feito por anotações na própria classe ou por arquivos de configuração XML, como o mencionado no enunciado. Nesse arquivo, define-se a correspondência entre a classe Java e a tabela do banco, incluindo a estratégia de geração da chave primária.

A geração da chave primária é um ponto crucial no mapeamento. O Hibernate oferece várias estratégias, como identity, sequence, hilo, increment, uuid, entre outras. A escolha da estratégia pode ser feita explicitamente pelo desenvolvedor ou, em alguns casos, o Hibernate pode selecionar automaticamente a mais adequada com base nas capacidades do banco de dados. Por exemplo, bancos como MySQL suportam identity, enquanto Oracle e PostgreSQL suportam sequence. A estratégia hilo é uma abordagem que não depende de recursos específicos do banco, gerando identificadores de forma eficiente.

Na prática, quando o mapeamento não especifica uma estratégia, o Hibernate pode usar um algoritmo de seleção automática. Isso significa que, dependendo do dialeto do banco configurado, ele escolherá entre identity, sequence ou hilo. Essa é a característica central da alternativa correta. É importante notar que o Hibernate não é um servlet container, nem exige que o banco seja NoSQL, e o nome da tabela pode ser definido explicitamente no mapeamento, não sendo obrigatoriamente igual ao nome da classe.

A pegadinha desta questão está em confundir o papel do Hibernate com outras tecnologias Java, como servlets, ou em interpretar erroneamente o arquivo de mapeamento XML como uma indicação de banco NoSQL. O candidato precisa entender que o Hibernate é um ORM para bancos relacionais e que a geração de chave primária é uma de suas funcionalidades centrais.

Guarde a distinção entre o que o Hibernate faz (ORM, geração de chaves, consultas) e o que outras tecnologias fazem (servlets para web, NoSQL para documentos). É exatamente nessa fronteira que as alternativas se dividem.

Alternativa A — ❌ Incorreta

A classe Java Funcionario não corresponde a um servlet. Servlet é uma tecnologia Java para criar aplicações web, estendendo HttpServlet. O Hibernate é um framework de persistência, e a classe mapeada é uma classe de entidade (POJO), não um servlet. A alternativa confunde o papel do Hibernate com o de um servlet container.

Alternativa B — ❌ Incorreta

O schema do banco de dados não precisa, obrigatoriamente, ter uma tabela chamada Funcionario. O mapeamento pode definir explicitamente o nome da tabela, que pode ser diferente do nome da classe. Por exemplo, a classe Funcionario pode ser mapeada para a tabela funcionarios ou tb_func. A alternativa assume uma correspondência automática que não é obrigatória.

Alternativa C — ✅ Correta ⟵ GABARITO

O Hibernate, quando não há uma estratégia de geração de chave primária explicitamente definida, pode escolher automaticamente entre identity, sequence ou hilo, dependendo das capacidades do banco de dados. Essa é uma característica do framework, que analisa o dialeto do banco configurado e seleciona a estratégia mais adequada. A alternativa está correta ao afirmar essa seleção automática.

Alternativa D — ❌ Incorreta

O fato de o mapeamento estar em XML não implica que o banco de dados seja NoSQL. O Hibernate é um framework ORM para bancos de dados relacionais. O XML é apenas um formato de configuração, e o banco subjacente continua sendo relacional. A alternativa confunde o formato de configuração com o tipo de banco de dados.

Alternativa E — ❌ Incorreta

A alternativa menciona uma classe Func mapeada na tabela Func, mas o enunciado fala de uma classe Funcionario. Não há indicação de que exista uma classe Func no contexto. A alternativa inventa uma classe que não foi mencionada, tornando-a incorreta.

Gabarito: letra C

Link permanente: /questoes/vu073325