Hibernate, dúvida com InheritanceType.JOINED

Olá gente,

Tenho a seguinte situação:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Pessoa{
   @Id
   @GeneratedValue(strategy = GenerationType.SEQUENCE)
   private int id;
   private String endereco;
   ...
}

@Entity
@PrimaryKeyJoinColumn(name = "id")
public class PessoaJuridica extends Pessoa{
   private String fantasia;
   private String cnpj;
   private String inscricaoEstadual;
   ...
}

@Entity
@PrimaryKeyJoinColumn(name = "id")
public class PessoaFisica extends Pessoa{
   private String nome;
   private String cpf;
   ...
}

Preciso listar todas as pessoas em um JTable, exibindo os atributos específicos de PessoaFisica e PessoaJuridica. Estou fazendo da seguinte forma:

public void atualizaListaFornecedores(){
   List pessoas = PessoaDAO.getPessoas();
   for(Iterator it = pessoas.iterator; it.hasNext();){
      Pessoa pessoa = (Pessoa) it.next();
      if(pessoa instanceof PessoaFisica){
         Adiciona na tabela dados da pessoa fisica
      }
      if(pessoa instanceof PessoaJuridica){
         Adiciona na tabela dados da pessoa juridica
      }
   }
}

Uma outra maneira que pensei:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Pessoa{
   @Id
   @GeneratedValue(strategy = GenerationType.SEQUENCE)
   private int id;
   private String endereco;

   public String getCnpj(){
      return null;
   }

   public String getCpf(){
      return null;
   }
   ...
}

@Entity
@PrimaryKeyJoinColumn(name = "id")
public class PessoaJuridica extends Pessoa{
   private String fantasia;
   private String cnpj;
   private String inscricaoEstadual;
   ...

   public String getCnpj(){
      return this.cnpj;
   }
}

@Entity
@PrimaryKeyJoinColumn(name = "id")
public class PessoaFisica extends Pessoa{
   private String nome;
   private String cpf;
   ...

   public String getCpf(){
      return this.cpf;
   }
}

Nesse caso, cada filha da classe Pessoa, responderia aos gets de seus atributos, respondendo null aos gets de atributos não correspondentes. Não testei, e nem sei se é possível.

De qualquer forma, existe uma maneira melhor de fazer isso?
O autor do artigo http://blog.caelum.com.br/2007/03/04/jpa-com-hibernate-heranca-e-mapeamentos/ recomenda evitar InheritanceType.JOINED, e no lugar ter uma tabela com todos os atributos. Não seria exagero, você manter essa estrutura de tabelas, sem normalização, só pra favorecer o código? Em uma aplicação com tabelas pequenas tudo bem, mas imaginem uma aplicações com tabelas gigantescas.

Desculpem pelo post grande, mas queria explicar direito minha situação. Espero que tenham entendido. Obrigado.

Vixi, foi pro fórum errado. :oops:
Era pra ir pro de Frameworks. Tem como arrumar?

A primeira forma me parece a mais correta. A segunda, retornando nulo nos métodos, eu não usaria. Talvez substituiria por uma tabela “Documento”, ou um campo “documento”.

Sobre o artigo (que eu não li), acredito que o autor se refere a praticidade e velocidade ao usar uma tabela só, já que você evita joins.
Na minha opinião, depende o caso. As vezes é melhor sacrificar a normalização para diminuir a complexidade no desenvolvimento.