Query avançada com JPA2[RESOLVIDO]

5 respostas
M

Tenho 3 tabelas: pessoa, pessoafisica, pessoajuridica.
Suas classes

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Pessoa{
	
	@Id
	@GeneratedValue
	private long id;
	private String nome;
	
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}

}
@Entity
public class PessoaFisica extends Pessoa {


	private BigInteger cpf;

	public BigInteger getCpf() {
		return cpf;
	}

	public void setCpf(BigInteger cpf) {
		this.cpf = cpf;
	}



}
@Entity
public class PessoaJuridica extends Pessoa {

       
	private BigInteger cnpj;
	

	public BigInteger getCnpj() {
		return cnpj;
	}

	public void setCnpj(BigInteger cnpj) {
		this.cnpj = cnpj;
	}

	
}

Agora tenho uma classe Testa para buscar todos os clientes

public class Testa {
  public static void main(String[] args) {
	    
		 EntityManager em = new JPAUtil().getEntityManager();
		 Query q2 = em.createQuery("SELECT p FROM Pessoa p");
		 List<Object[]> pessoas = q2.getResultList();
	 
		 for(Object[] pessoa : pessoas){
			 
		     System.out.println( /* Gostaria de exibir todos os nome das pessoas com seus cpf caso tenha e com seus cnpj caso tenha */ );  
		 }


     }
  
}

A sql gerada pelo hibernate está correta pois retorna todos as pessoas porém no meu console não consigo exibir todas as pessoas com os cpf caso tenha e com seus cnpj caso tenha. :frowning:
Desejo uma saida assim:
nome------- |cpf ----------------|cnpj
carlos--------065.065.654.37—null
vaness-------null-----------------55 65464 54 .64 -50

5 Respostas

ErickRAR

Pode utilizar o instanceof.

if(pessoa instanceof PessoaFisica) System.out.println(((PessoaFisica)pessoa).getCpf()); else if(pessoa instanceof PessoaJuridica) System.out.println(((PessoaJuridica)pessoa).getCnpj());

M
 este erro: Exception in thread main java.lang.ClassCastException: model.PessoaFisica cannot be cast to [Ljava.lang.Object;

at Testa.main(Testa.java:22)


romarcio
Tenta assim:
public class Testa {
    public static void main(String[] args) {
        EntityManager em = new JPAUtil().getEntityManager();
        Query q2 = em.createQuery("SELECT p FROM Pessoa p");
        
        List&lt;Pessoa&gt; pessoas = q2.getResultList();

        for (Pessoa pessoa : pessoas) {
            if (pessoa instanceof PessoaFisica) {
                PessoaFisica fisica = (PessoaFisica) pessoa;
                System.out.println(fisica.getId() + " " + fisica.getNome() + " " + fisica.getCpf());
            } else {
                PessoaJuridica juridica = (PessoaJuridica) pessoa;
                System.out.println(juridica.getId() + " " + juridica.getNome() + " " + juridica.getCnpj());
            }
        }
    }
}
M

romarcio, funcionou. Brigadão romarcio e ErickRAR

romarcio

Edita seu 1° post ele coloca ao lado do título: [RESOLVIDO]

:thumbup:

Criado 27 de julho de 2012
Ultima resposta 27 de jul. de 2012
Respostas 5
Participantes 3