Considere uma arquitetura que utiliza o Hibernate 7.2/Jakart...

Próximas questões
Com base no mesmo assunto
Q4071634 Programação
Considere uma arquitetura que utiliza o Hibernate 7.2/Jakarta Persistence (jakarta.persistence.InheritanceType). Pretende-se mapear três entidades: mamífero, cachorro e gato. As entidades cachorro e gato herdam de mamífero. O modelo de banco de dados para representar essas entidades deve ser construído de forma que exista uma tabela para cada entidade . As tabelas Cachorro e Gato devem fazer referência à tabela Mamífero.

Assinale a alternativa que apresenta a anotação CORRETA que deve ser utilizada.
Alternativas

Comentários

Veja os comentários dos nossos alunos

A alternativa CORRETA é a A) @Inheritance(strategy = InheritanceType.JOINED).

Justificativa:

No Jakarta Persistence / JPA (e no Hibernate), existem três estratégias principais de herança mapeadas pelo enum InheritanceType:

  1. JOINED (Tabela por Classe Concreta com Junção / Normalizada):

    • Comportamento: Cria uma tabela para a superclasse (Mamifero) e uma tabela para cada subclasse (Cachorro e Gato).

    • Relacionamento: As tabelas das subclasses contêm apenas os seus atributos específicos e mantêm uma Chave Estrangeira (FK) apontando para a Chave Primária (PK) da tabela pai (Mamifero).

    • Encaixe no enunciado: Atende exatamente ao requisito "exista uma tabela para cada entidade. As tabelas Cachorro e Gato devem fazer referência à tabela Mamífero".

Por que as outras alternativas estão incorretas?

  • B) SINGLE_TABLE: Mapeia toda a hierarquia de classes em uma única tabela no banco de dados, utilizando uma coluna discriminadora para identificar o tipo da entidade.

  • C) TABLE_PER_CLASS: Cria tabelas independentes para cada classe concreta contendo todos os atributos (da superclasse e da subclasse na mesma tabela), sem que haja relacionamento ou referência (FK) entre as tabelas no banco.

  • D) SPECIALIZED_SUPERCLASS: Não é uma estratégia válida de herança na anotação @Inheritance. O conceito relacionado no JPA é @MappedSuperclass, onde a superclasse não possui tabela própria.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo