galera estou com uma dúvida… já vi a documentação do hibernate mas não se encaixa no meu caso…
O problema é o seguinte:
Tenho uma tabela Pessoa, que não tem nenhuma chave primaria.
Tenho as tabelas Funcionario e Paciente, que herdam de Pessoa, no caso Paciente tem chave primária.
E por fim, tenho a tabela usuario, que herda de funcionario e tem chave primaria.
Como eu faria o mapeamento das tabelas, especialmente da funcionario e usuario??
ta e qual o motivo de nao ter chave primeraria em todas?
Bom, tem 2 formas. A primeira, que é mais performática e se encaixa bem em ambientes simples, é colocar os dados de Pessoa, Paciente e Funcionario na mesma tabela (o pessoal chama de estratégia do “tabelão”). Aí vc só preenche as colunas referentes aos tipos que vai usar. Deve se lembrar que nessa estratégia as colunas não podem ter atributo NOT NULL.
A outra forma é criar uma Tabela para cada entidade e fazer um relacionamento um-para-um entre Pessoa e Funcionario e Pessoa e Paciente, além de declarar a herança nos arquivos de mapeamento do Hibernate (ou anotações , se estiver usando o Hibernate Annotations). Esta estratégia tem performance inferior, pois o Hibernate vai sempre fazer as operações na tabelas pai e filha para buscar os dados.
Uma pergunta: é realmente necessário este tipo de herança? Você tem MÉTODOS que se comportam de maneira diferente entre as classes filhas para justificar o uso com poliformismo? Senão, o mais indicado é colocar em uma classe só (ex Pessoa) e colocar um atributo Tipo (Funcionario ou Paciente), que pode ser um int, String ou Enum(java 5). Isso não é tão orientado a objetos, mas evita bastante complexidade no seu modelo de classes.
Espero ter ajudado
eu mudaria para gambiarra do “tabelão”