Olá pessoal,
Está é mais uma dúvida sobre uma assunto que já é antiga aqui no fórum visto pelo número de postagens sobre o assunto. No entanto mesmo lendo estes posts eu ainda fiquei com dúvida. Então gostaria de uma ajuda de vocês que entedem bem sobre o assunto.
A minha dúvida inicial era sobre como modelar uma Classe de Cliente, sendo que o cliente pode ser uma Pessoa Física ou Jurídica. Agora eu tenho modelado da forma que acredito ser suficiente.
Modelagem das classes:
- Criei uma Classe Abstract para Pessoa: public abstract class Pessoa
- Criei uma SubClasse para PessoaFisica: public class PessoaFisica extends Pessoa
- Criei uma SubClasse para PessoaJuridica: public class PessoaJuridica extends Pessoa
- Criei uma Classe para Cliente (composição)
public class Cliente {
private Pessoa pessoa;
…
public setPessoa(Pessoa pessoa)…
public Pessoa getPessoa();
…
}
Ai idéia era simples, sendo a classe Pessoa Abastract eu era forçado a instanciar usando a Classe PessoaFisica ou Juridica conforme o tipo do cliente e quando eu precise pegar os dados inerente a uma PessoaFisica ou PessoaJuridica eu simplesmente faria um Cast conforme o tipo do cliente.
Mas aqui está a duvida como fazer o Mapping do hibernate nesta situação via XML?
No banco de dados existem 4 tabelas diferentes:
Uma Para Pessoa (PK CodigoPessoa)
Uma Para PessoaJuridica (PK CodigoPessoa FK com CodigoPessoa)
Uma Para PessoaFisica (PK CodigoPessoa FK com CodigoPessoa)
Uma Para Cliente (PK CodigoPessoa FK com CodigoPessoa)
O Configuração da Pessoa.hbm.xml tá feita e funcionando, o problema esta em como mapear o attributo pessoa da classe Cliente para que o mesmo funcione quando eu for dar um load, ou seja, instancie a Classe correta conforme o tipo do cliente (PF ou PJ).
Pessoal, vocês acham que está forma acima é viagem, tá tudo furado o conceito?
Obrigado pela atenção