Olá,
Estou com a seguinte dúvida/problema: Pensando em uma aplicação para gerenciar hospedagens de um hotel, eu estou criando as classe de clientes/hóspede. Pensando no futuro, imagine que um cliente se hospeda e no check-out ele pede a missão de uma nota fiscal, se ele for pessoa física o sistema consegue emitir uma nf no cpf dele por exemplo, mas se ele for funcionário de uma empresa e quer que a nf seja emitida para o cnpj da empresa? Pensando nisso, eu idealizei o projeto das classes de clientes da forma abaixo:
!
Então eu criei uma classe abstrata chamada Cliente, que tem um atributo ID e um método faturar(). Criei as classes PessoaFisica e PessoaJurídica, as duas extendem a clesse cliente, pois compartilham de um atributo em comum(ID) e ambas podem ser faturados. Já a classe PessoaFísica implementa a interface Hospedável que tem o método hospedar(), pois é o único tipo de cliente que poderá popular uma tabela "hospedagem" no futuro.
A grande pergunta é: Como fazer para a JPA entender que o atributo ID é herdado da classe abstrata Cliente? Como será a representação na base de dados? Serão 3 tabelas (clientes, pessjoa_juridica, pessoa_fisica) ou será uma tabela só, tipo clientes, com os atributos das duas tabelas?
Outra coisa que estou pensando aqui, é o seguinte: Vou criar as entidades Endereço e Telefone, mas caso a JPA crie duas tabelas para os clientes (tipo pessoa_fisica e pessoa_juridica) vou ter problemas com as entidades Endereço e Telefone no banco de dados pois podem ter clientes com o mesmo id, tipo: se no campo "id_cliente" da tabela endereço tiver preenchido com o valor 1, esse valor pode ser de uma pessoa física ou de uma pessoa jurídica, aí vou ter problema de inconsistência de dados.
Como lidar com essas duas situações?
Agradeço desdejá.