Técnico de Gestão Administrativa - Analista de Sistemas
Analise o código a seguir, escrito em linguagem Java e com anotações do Hibernate 6.1. Considere que os métodos de acesso get e set foram omitidos da especificação das classes abaixo para efeitos de brevidade.Sobre o modelo de banco de dados decorrente deste mapeamento objeto-relacional, é correto afirmar que
Ao atributo nome da tabela Pessoa será do tipo VARCHAR.
Bo atributo salario da tabela Professor não poderá ser nulo.
Co atributo id da tabela Aluno será uma chave primária.
Do atributo diurno da tabela Pessoa poderá ter só 2 valores.
Eo atributo cpf da tabela Pessoa poderá ter 11 caracteres.
Revelar gabarito e comentário▾
GabaritoC — o atributo id da tabela Aluno será uma chave primária.
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: Análise do Modelo de Banco de Dados
Gabarito: letra C. No mapeamento objeto-relacional com Hibernate, a anotação @Id em um atributo de uma entidade define que ele será a chave primária da tabela correspondente. Portanto, o atributo id da classe Aluno, se anotado com @Id, será a chave primária da tabela Aluno. As demais alternativas apresentam afirmações incorretas sobre os tipos de dados e restrições geradas pelo mapeamento.
O Hibernate é um framework de mapeamento objeto-relacional (ORM) que transforma classes Java em tabelas de banco de dados relacionais. Cada atributo da classe vira uma coluna na tabela, e o tipo do atributo Java é convertido para um tipo SQL correspondente. Por exemplo, um String em Java pode ser mapeado para VARCHAR, TEXT, ou CLOB, dependendo da configuração e do dialeto do banco. Um double ou float pode ser mapeado para DOUBLE, FLOAT, ou NUMERIC. A anotação @Column permite especificar detalhes como tamanho, nulabilidade e unicidade. A anotação @Id marca o atributo como chave primária, e @GeneratedValue define a estratégia de geração de valores para essa chave.
A questão apresenta um cenário com herança entre classes (Pessoa, Professor, Aluno). O Hibernate oferece estratégias para mapear herança, como SINGLE_TABLE (uma única tabela para todas as classes), JOINED (uma tabela para cada classe, com junção por chave estrangeira) e TABLE_PER_CLASS (uma tabela para cada classe concreta). A estratégia padrão é SINGLE_TABLE, que cria uma única tabela com um discriminador para distinguir os tipos. Nesse caso, a tabela Pessoa conteria todas as colunas de todas as classes da hierarquia, e as colunas específicas de Professor e Aluno seriam anuláveis para registros de outros tipos.
A pegadinha da questão está em analisar cada alternativa com base no que o mapeamento realmente gera, considerando a estratégia de herança e as anotações. A alternativa C é a única que afirma corretamente que o atributo id será uma chave primária, o que é uma consequência direta da anotação @Id. As demais alternativas fazem suposições incorretas sobre tipos de dados e restrições que não são garantidas pelo mapeamento padrão.
Critério
Alternativa C (correta)
Alternativas A, B, D, E (incorretas)
Base da afirmação
Anotação @Id define chave primária
Suposições sobre tipos/nulabilidade sem anotações explícitas
Garantia pelo mapeamento
Sempre verdadeiro, independente da estratégia de herança
Não garantido; depende de @Column, dialeto e tipo Java
Exemplo de erro
—
A: String pode virar TEXT/CLOB; B: sem nullable=false é anulável; D: diurno pode ser String; E: sem length=11 tamanho varia
Alternativa A — ❌ Incorreta
A alternativa afirma que o atributo nome da tabela Pessoa será do tipo VARCHAR. Embora seja comum que um String em Java seja mapeado para VARCHAR, isso não é garantido. O Hibernate pode mapear String para VARCHAR, TEXT, ou CLOB, dependendo da configuração e do dialeto do banco. Sem a anotação @Column especificando o tipo, não é possível afirmar com certeza que será VARCHAR. Portanto, a afirmação é incorreta.
Alternativa B — ❌ Incorreta
A alternativa afirma que o atributo salario da tabela Professor não poderá ser nulo. A nulabilidade de uma coluna é definida pela anotação @Column(nullable = false). Sem essa anotação, a coluna é anulável por padrão. Além disso, em uma estratégia de herança SINGLE_TABLE, as colunas específicas de subclasses são anuláveis para registros de outros tipos. Portanto, não é possível afirmar que salario não poderá ser nulo.
Alternativa C — ✅ Correta ⟵ GABARITO
A alternativa afirma que o atributo id da tabela Aluno será uma chave primária. Isso é correto, pois a anotação @Id em um atributo de uma entidade JPA/Hibernate define que ele será a chave primária da tabela correspondente. Independentemente da estratégia de herança, o atributo id é a chave primária da entidade Aluno.
Alternativa D — ❌ Incorreta
A alternativa afirma que o atributo diurno da tabela Pessoa poderá ter só 2 valores. Se o atributo diurno for do tipo boolean em Java, ele será mapeado para um tipo booleano no banco, que pode ter valores TRUE ou FALSE. No entanto, a afirmação é vaga e não especifica o tipo do atributo. Se diurno for um String, por exemplo, poderia ter mais de 2 valores. Portanto, a afirmação é incorreta.
Alternativa E — ❌ Incorreta
A alternativa afirma que o atributo cpf da tabela Pessoa poderá ter 11 caracteres. O tamanho de uma coluna é definido pela anotação @Column(length = 11). Sem essa anotação, o tamanho padrão pode variar. Além disso, o cpf pode ser mapeado como String ou como um tipo numérico, o que afetaria o tamanho. Portanto, não é possível afirmar que terá exatamente 11 caracteres.