Utilizando JPA e herança entre classes, qual melhor forma de ter isso em tabela no BD?

Olá pessoal!
Estou fazendo um projeto, utilizando como BD o PostgreSQL e JPA.
Eu tenho:
Classe mãe: Pessoa
Classes filhas: Funcionário e Paciente

Andei estudando como tratar esse tipo de herança no BD utilizando JPA, e pelo que encontrei sobre Herança de Entidades há 3 tipos:
Single Table: Todas as classes na hierarquia são mapeadas para uma tabela única (Um valor em um campo identifica a subclasse específica);
Table per class: Cada classe na hierarquia é mapeada para uma tabela separada (Todas as propriedades das classes são mapeadas para colunas desta tabela incluindo as propriedades herdadas);
Joined subclass: A raiz da hierarquia é representada por uma tabela e cada subclasse é representada por uma tabela separada que contém campos específicos para a subclasse e também as colunas que representam as suas chaves primárias.

Gostaria de saber: 1. Qual é a melhor forma de fazer? (mesmo sendo a mais difícil)
2. Qual é a forma mais fácil, mas que não deixa de ser correta?

Muito obrigada!
Até mais,
Dina

Ola,

Bom, pensando no exemplo que vc citou… eu falaria que neste caso seria melhor usar o Joined subclass, uma vez que:

Um paciente pode ser um funcionário… assim vc não precisaria duplicar regristros de alguns campos…

Ps.: isto não é só um problema de JPA, isto é um problema de O/R, como modelar “heranças” em DB…

Olá! Obrigada por responder!

Hum… Pelo que vc escreveu, fiquei na dúvida se eu entendi bem o conceito de Joined subclass. Deixa eu ver se entendi…

Eu teria no BD:

  • 1 tabela pessoa
  • 1 tabela paciente
  • 1 tabela funcionário

Nas tabelas paciente e funcionário eu teria uma chave estrangeira da tabela Pessoa (do campo codigoPessoa, por ex).

Correto??

Obrigada

[quote=dina]Olá! Obrigada por responder!

Hum… Pelo que vc escreveu, fiquei na dúvida se eu entendi bem o conceito de Joined subclass. Deixa eu ver se entendi…

Eu teria no BD:

  • 1 tabela pessoa
  • 1 tabela paciente
  • 1 tabela funcionário

Nas tabelas paciente e funcionário eu teria uma chave estrangeira da tabela Pessoa (do campo codigoPessoa, por ex).

Correto??

Obrigada[/quote]

Isto ai, vc entendeu corretamente, pq assim se vc precisar cadastrar um funcionário como paciente, vc não precisará duplicar dados… já estará tudo na tabela pessoa, só criar o registro na tabela de paciente, com a chave estrangeira de pessoa.

:slight_smile:
Entendi!!
Muito obrigada Bruno!!