Herança JOINED - Flexível e bom para otimizar espaço de armazenamento e quando existem vários relacionamentos em comum.
Coloquei os mapeamento do banco e da classe nas imagens anexadas
@Entity
@Inheritance(strategy=InheritanceType.JOINED)‏
@DiscriminatorColumn(name="TIPO")‏
public abstract class Pessoa{?}
@Entity
@DiscriminatorValue("FISICA")‏
public class PessoaFisica extends Pessoa{?}
@Entity
@DiscriminatorValue("JURIDICA")‏
public class PessoaJuridica extends Pessoa{?}
Single Table - A melhor opção quando é necessário desempenho em consultas polimórficas e espaço de armazenamento não é problema
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)‏
@DiscriminatorColumn(name="TIPO")‏
public abstract class Pessoa{?}
@Entity
@DiscriminatorValue("FISICA")‏
public class PessoaFisica extends Pessoa{?}
@Entity
@DiscriminatorValue("JURIDICA")‏
public class PessoaJuridica extends Pessoa{?}
Table per Class - Indicado quando não existem muitos relacionamentos em comum e a herança é mais conceitual do ponto de vista de negócios
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)‏
public abstract class Pessoa{?}
@Entity
public class PessoaFisica extends Pessoa{?}
@Entity
public class PessoaJuridica extends Pessoa{?}
Agora a analise de qual se encaixa melhor, é com voce