Usando Hibernate, o mapeamento de uma relação de herança pod...
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: A - classe concreta, subclasse ou hierarquia.
Quando estamos trabalhando com o Hibernate, um framework amplamente utilizado para mapeamento objeto-relacional em aplicações Java, um dos conceitos fundamentais é o mapeamento das relações de herança das classes no modelo de domínio para as tabelas no banco de dados. Existem várias estratégias para abordar esse mapeamento, e a questão aborda justamente esse conhecimento.
O mapeamento de herança no Hibernate pode ser configurado de três formas principais:
- Tabela por hierarquia: Nessa estratégia, uma única tabela é usada para toda a hierarquia de classes. Um discriminador é utilizado para diferenciar entre os diferentes tipos de classes.
- Tabela por subclasse: Aqui, cada classe na hierarquia tem sua própria tabela, que inclui apenas os campos específicos para aquela subclasse. As tabelas das subclasses estão ligadas à tabela da superclasse através de chaves estrangeiras.
- Tabela por classe concreta: Nesta abordagem, apenas as classes concretas (não abstratas) têm suas tabelas correspondentes no banco de dados, e cada uma dessas tabelas contém colunas para todos os campos da classe, incluindo os campos herdados de quaisquer superclasses.
Compreender essas estratégias é vital para quem trabalha com Hibernate, pois afeta o desempenho da aplicação, a facilidade de manutenção do código e a forma como as consultas aos dados são feitas. A escolha de uma estratégia sobre a outra dependerá dos requisitos específicos da aplicação e do modelo de dados.
A alternativa A é correta porque lista todas as estratégias de mapeamento de herança suportadas pelo Hibernate. Isso mostra que você pode escolher entre mapear cada classe em sua própria tabela (tabela por classe concreta), mapear cada subclasse em sua própria tabela (tabela por subclasse), ou usar uma única tabela para representar toda a hierarquia de classes (tabela por hierarquia).
Ter essa flexibilidade permite que o desenvolvedor ou arquiteto de software escolha a melhor estratégia de mapeamento baseando-se nas necessidades específicas do projeto, como a importância da normalização dos dados, o desempenho da aplicação, ou até mesmo a complexidade do modelo de dados.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
O Hibernate suporta três estratégias de mapeamento de herança
- Uma tabela por hierarquia de classes
- Uma tabela por subclasse
- Uma tabela por classe concreta (polimorfismo implicito)
- Não é possível misturar as estratégias para um mesmo mapeamento de classe
http://www.dsc.ufcg.edu.br/~jacques/cursos/daca/html/hibernate/hibernate.
== Comentários Adicionais (07/11/2011) ==
Hierarquia de Classes.
Classe Concreta
Uma tabela por Subclasse
Questão correta, pois realmente existem 3 formas de mapear herança com o Hibernate:
1) Uma tabela por classe concreta
- Dados não normalizados
- Depende de um UNION para consultas na superclasse.
- Ideal para hierarquias horizontais
2)Uma única tabela para toda hierarquia de classes
- Utiliza discriminator para diferenciar elementos da hierarquia.
- Queries são feitas em uma única tabela, que pode se tornar bastante grande.
- Modelo mais simples. Modelo default. Ideal para hierarquias com poucas classes.
3)Uma tabela por classe da hierarquia
- Permite associações e consultas polimórficas
- Dados normalizados. Sempre realiza join.
- Usado em hierarquias de muitos níveis (verticais).
Bons estudos!
Mesmo acertando, ainda achei a questão um pouco confusa se olhar ao "pé da letra" ou possíveis ambiguidades.
A questão ainda está levemente mal descrita.
Pois classes concretas podem ser apenas subclasses de uma classe abstrata.
Quando ele fala subclasses, chegamos a uma mesma conclusão da afirmativa feita acima, dando exatamente na mesma coisa.
Hierarquia, não tem nem o que falar.
Creio que a descrição abaixo seria mais adequada.
Tabela única para todas as classes (single table)
Uma tabela para cada classe da hierarquia (joined)
Uma tabela para cada classe concreta (table per class)
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo