| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/03/2007 21:57:14
|
andreiribas
JavaEvangelist
![[Avatar]](/images/avatar/39016cfe079db1bfb359ca72fcba3fd8.jpg)
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/03/2007 00:17:41
|
maxguzenski
Virtual Machine Man
![[Avatar]](/images/avatar/d4c2e4a3297fe25a71d030b67eb83bfc.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/03/2007 00:19:03
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/03/2007 00:22:03
|
maxguzenski
Virtual Machine Man
![[Avatar]](/images/avatar/d4c2e4a3297fe25a71d030b67eb83bfc.jpg)
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 |
|
|
 |
|
|