Dúvida Herança Hibernate  XML
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Autor Mensagem
andreiribas
JavaEvangelist
[Avatar]

Membro desde: 30/04/2006 10:43:13
Mensagens: 478
Localização: Curitiba - PR
Offline

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??

SCJP 6.0
OCE JSP and Servlet Developer, JEE 6
[MSN]
maxguzenski
Virtual Machine Man
[Avatar]

Membro desde: 07/03/2003 11:47:42
Mensagens: 549
Localização: Porto Alegre
Offline

ta e qual o motivo de nao ter chave primeraria em todas?

Maximiliano Ferreira Guzenski
Sun Certified Java Programmer 1.4
Sun Certified Web Component Developer 1.4
http://www.guzenski.com.br
[Email] [WWW] [MSN]
amhfilho
JavaTeenager

Membro desde: 26/01/2005 08:23:41
Mensagens: 167
Localização: São José dos Campos - SP
Offline

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
maxguzenski
Virtual Machine Man
[Avatar]

Membro desde: 07/03/2003 11:47:42
Mensagens: 549
Localização: Porto Alegre
Offline

eu mudaria para gambiarra do "tabelão"

Maximiliano Ferreira Guzenski
Sun Certified Java Programmer 1.4
Sun Certified Web Component Developer 1.4
http://www.guzenski.com.br
[Email] [WWW] [MSN]
 
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Ir para:   
Powered by JForum 2.1.8 © JForum Team