Duvida no Mapeamento de Herança

9 respostas
exilado

Boa noite pessoal.

Tem algumas horas que estou procurando solução para o meu problema e até o momento não obtive resultado.
é o seguinte: No banco de dados tenho uma tabela Pessoas onde uma pessoa pode ser cliente, fornecedor, funcionario entre poutros. Porem uma pessoa pode ser tanto cliente como funcionario ao mesmo tempo. ai é que complicou. rs

tava pesquisando sobre o mapeamento de Tabela por hierarquia de classes (que seria meu caso) porem pelo que me parece a pessoa deveria ser de um tipo ou de outro e não mais de um.

gostaria de saber se há uma forma de fazer o mapeamentoneste caso.

Estou usando o Hibernate e o mapeamento é feito através de Xml.

Obrigado

9 Respostas

A

boa noite,

Isso é um bom exemplo que ocorre inúmeras vezes, tenho um exemplo em que um empregado pode ser um aluno da mesma instituição ao mesmo tempo.
Uma boa normalização seria criar uma entidade tendo como herança essas duas classes, por exemplo:

Funcionario Cliente

cliente.funcionario

Poderia ser uma saída, assim ele seria um cliente com regalias de funcionário, como por exemplo comprar com um desconto maior.

exilado

Certo.

Mas eu cho que faltou explicação da minha parte

na tabela pessoas foi criado um atributo para cada tipo(fornecedor, funcionario, etc) sendo S para sim e N para não.

ai tenho uma superclasse pessoa e uma subclase para cada tipo de pessoa.
até ai blz, o problema é quando vai mapear com Hibernate pos pelo que vi ele pede um discriminator. Como eu vou definir um se cada tipo tem um campo propio?

rmendes08

exilado:
Certo.

Mas eu cho que faltou explicação da minha parte

na tabela pessoas foi criado um atributo para cada tipo(fornecedor, funcionario, etc) sendo S para sim e N para não.

ai tenho uma superclasse pessoa e uma subclase para cada tipo de pessoa.
até ai blz, o problema é quando vai mapear com Hibernate pos pelo que vi ele pede um discriminator. Como eu vou definir um se cada tipo tem um campo propio?

Na minha opinião, é melhor você abandonar a herança é trabalhar com composição. Ao invés de você ter uma subclasse Fornecedor herdando de funcionario é melhor que sua classe Fornecedor tenha uma referência para Pessoa com um relacionamento one-to-one. Isso porque para mapear herança no Hibernate o seu modelo de dados tem que suportá-lo. Os dados de Fornecedor, Funcionario, como foram modelados ? Em tabelas separadas ou na mesma tabela ?

exilado

Essa é a modelagem da tabela pessoas.
Onde Tipo é para F - Física Ou J - Jurídica
e os campos Cliente, Funcionário, Fabricante e Fornecedor são Preenchidos com SIM ou NAO

rmendes08

Entendi, mas a minha pergunta é outra, por exemplo, os dados exclusivos de Fornecedor por exemplo, são colocados em uma tabela Fornecedor ou serão colocadas na tabela Pessoa e ficarão nulas para Pessoas que não são fornecedor ? Entendeu meu questionamento ?

exilado

Certo. Essa é a unica tabela.
Todos os dados estarão nela

exilado

Será que seria melhor criar um mapeamento para cada subclasse apenas, e todos direcionando para a mesma tabela?

exilado

Será que Ninguém Nunca passou por uma situação dessa.
Help Me Please!

drsmachado

@Inheritance(Strategy=…)
Pesquise sobre isso…

Criado 8 de abril de 2012
Ultima resposta 11 de abr. de 2012
Respostas 9
Participantes 4