cara se não me engano você tem que usar um método chamado instanceof();
Mas seu assunto está mal especificado não é isso que você quer.
Você já cadastrou as pessoas, correto?
Provavelmente no seu banco de dados deve ter uma tabela que relaciona Pessoa e Tipo de Pessoa. VERIFIQUE ISSO, se não a modelagem do seu sistema pode estar completamente errada.
Ai basta você utilizar o comando select correto.
A diferença é que não conheço hibernate. mas por exemplo:
SELECT a.nmPessoa FROM Pessoa a
WHERE a.idPessoa IN (SELECT * FROM TipoPessoa WHERE nmTipoPessoa LIKE ‘Pessoa Fisica’);
fiz correndo o comando select, mas é mais ou menos por ai.
Se você quer instanciar objetos diferentes vindos do banco, sendo que os dados vem da mesma tabela, então você precisa ter algum campo ou qualquer indicador que separe os dois tipos. Se não tiver, então é preciso refazer a estrutura, criando 2 tabelas ou adicionando um campo com o tipo de pessoa.
Dica: alguns bancos, como o PostgreSQL, implementa a herança, não sei explicar se na arquitetura do banco isso trás alguma vantagem à usar 2 ou mais tabelas separadas, mas seria bom dar uma olhada se for do seu interesse.
O instanceof só funciona se o objeto já estiver instanciado, ex.:
Edit: Não vi que se tratava de Hibernate…hehe
Acredito que seja a mesma coisa, porque ele só grava no banco sem criar nenhum campo adicional.
Atrazei meu TCC tentando aprender hibernate e traumatizei…rs
Então você quer saber se um Cliente é PessoaFisica ou PessoaJuridica (da qual estão na tabela Pessoa)…certo?
Pra saber se uma Pessoa é um Cliente é fácil:
"SELECT * FROM Pessoa LEFT JOIN Cliente ON Pessoa.id = Cliente.id"
Mas saber qual Pessoa (ou Cliente) é um PessoaFisica ou PessoaJuridica, é tudo aqui que falamos anteriormente.
Pra ajudar: No banco, o que diferencia uma PessoaFisica de PessoaJuridica? Angum campo, a formatação do CNPJ e do CPF?