Retorno do DAO

Ola boa noite.
Tenho a seguinte cenário. Tenho as seguintes classes: PessoaFisica e PessoaJurídica que extendem de Pessoa. Além disso tenho a classe Proprietario que tem por composição Pessoa. Ocorre que eu tenho uma tela que precisa apresentar os dados de um proprietario (NOME, CPF, RG E SEXO) a partir de uma pesquisa feita pelo o nome conforme o DAO abaixo.

	public List<Proprietario> findProprietarioByNome(String nome) {
		return em
				.createQuery(
						"select p from Proprietario p where lower(p.pessoa.nome) like:nome order by p.pessoa.nome",
						Proprietario.class)
				.setParameter("nome", nome.toLowerCase() + "%")
				.getResultList();
	}

Após a execução da pesquisa é retornando uma lista de Proprietário, até aí tudo dentro do esperado. Porém eu preciso apresentar na tela os dados de CPF, RG e Sexo que são atributos de PessoaFisica, conforme o diagrama que apresentei. Fazendo prp.getPessoa.getNome, eu consigo acessar o atributo nome da Entidade Pessoa, porem eu não consigo fazer prp.getPessoa.getPessoaFisica.getCPF na Entidade PessoaFisica, visto que em pessoa não existe nenhuma referência para PessoaFisica. Há uma maneira de acessar os atributos de PessoaFisica a paritr de Proprietario, da forma que como está projetado? A herança aqui no caso do meu projeto se justifica, visto que uma PessoaFisica nunca irá Fazer o papel de PessoaJuridica.

Se você receber um objeto de PessoaFisica, faça o cast para este e obtenha os atributos dele. Senão, faça cast para PessoaJuridica.

Ola drsmachado.
Obrigado pela força.
O que eu recebo, é uma lista de Proprietarios. Como proprietario, que não tem relação direta com PessoaFisica, não é possivel fazer Cast.
A estrutura da minha classe Pessoa esta abaixo:

@Entity
public class Proprietario implements Serializable{

	private static final long serialVersionUID = 5563692153649468712L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	
	@OneToOne
	@NotNull(message = "Todo proprietário precisa estar vinculado a uma pessoa")
	@JoinColumn(name = "pessoa_id")
	private Pessoa pessoa;
	
	@OneToMany(mappedBy="proprietario",cascade = CascadeType.PERSIST)
	private List<Posse> posses;

	
	public Proprietario(){}

	public Proprietario(Pessoa pessoa) {
		this.pessoa = pessoa;
	}

	public void addPosse(Posse posse){
		if(posses == null){
			posses= new ArrayList<Posse>();
		}
		posses.add(posse);
	}

Com essa estrutura eu não consigo acessar os atributos de PessoaFisica

Claro que é possível, quem te disse que não?

//Suponha que prop é objeto de Proprietário
((PessoaFisica) prop.getPessoa()).getCpf();

Tenta algo assim…