Dúvida Saber Classe do Objeto No JSF

Bom dia a todos, seguinte tenho uma estrutura assim abstract Pessoa com Herança Single Table, PessoaFisica e Juridica extend de Pessoa… até ai nada d +

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Pessoa {

}

@Entity
@DiscriminatorValue("PF")
public class PessoaFisica extends Pessoa {

   private String nome;
}

@Entity
@DiscriminatorValue("PJ")
public class PessoaJuridica extends Pessoa {

   private String razaoSocial;
}

Ex: Meu Cliente tem um @ManyToOne de Pessoa.


@Entity
public class Cliente {

@ManyToOne
private Pessoa pessoa;

meu Problema é caso na minha lista tiver clientes que são PF e PJ…

<p:datable id="tableCliente" value="clienteBean.todosClientes" var="cliente" >
     <p:column>#{cliente.pessoa.nome}</p:column>
     <p:column>#{cliente.pessoa.razaoSocial}</p:column>
</p:datatable>

Se a Row for de um Cliente PJ ele vai dar pau quando tentar busca por #{cliente.pessoa.nome}
Tem como saber de que classe é o objeto dentro da pagina xhtml? só pelo campo criado pelo hibernate no SingleTable

Obrigado se puderem me ajudar agradeço muito

Você deu uma olhada na Herança com estrategia JOINED?
eu passei pelo msmo problema e consegui resolver adotando essa estrategia
se você for mudar de estrategia e precisar de ajuda me da um toque

flw

O ideal é você pesquisar apenas por um tipo ou apenas por outro.

Mas tem outras duas saídas:

  1. Deixar apenas um <p:column> e dentro dele colocar um outputText com rendered="#{not empty cliente.pessoa.nome}" e um para apenas empty em cima do nome também.
  2. Criar um método na sua classe, getNomePessoaDeQualquerTipo que aí retornaria uma String com o nome e não precisaria de lógica na página.

Então, eu tinha até pensado no rendered mas como n to com sistema aki pra testar. achei q se fosse um PJ e fosse mesmo testar not empty na propriedade ia dar exception q nao existia o campo…

Em Relação a pesquisar por 1 tipo e por outro… vai rolar… mas com certeza uma hora ou outra vai precisar pesquisar no geral…

Mas eu imaginei que conseguisse saber de q classe é o objeto, pelo JSF, por no Mapeamento do Single Table ele deixa uma coluna dizendo o type da class… mas n sei como recuperar aquilo dentro do xhtml…

por que outra saida tb seria colocar por exemplo um tipo na class pessoa. ai eu teria um atributo com essa informação, e faria rendered nas colunas dependendo do type.

Para criar um método que informe se o cara é PJ ou não é mole:public boolean isPj(){ return cnpj != null && !cnpj.trim().equals(""); }Mas tem que colocar CNPJ como obrigatório para PJ. [=

Então Jake, na classe teria milhares de formas…

if(object instanceof PJ){
}

Tem essa sua, só q eu imaginava que tivesse algo no xhtml p eu saber isso compreende… mas blz provavelmente eu esteja querendo d+ kkkkk…
Mas vlw ja deu uma boa esclarecida valeu mano.

[quote=colored]Então Jake, na classe teria milhares de formas…

if(object instanceof PJ){
}

Tem essa sua, só q eu imaginava que tivesse algo no xhtml p eu saber isso compreende… mas blz provavelmente eu esteja querendo d+ kkkkk…
Mas vlw ja deu uma boa esclarecida valeu mano.[/quote]Só toma cuidado que em muitos casos instanceof é considerado má pratica. ^^

Aé? kkkkk…
E qual seria a boa prática pra esse caso?

[quote=colored]Aé? kkkkk…
E qual seria a boa prática pra esse caso?[/quote]Eu prefiro a consulta por certo tipo. C não tiver opção, você realmente terá que utilizar o instanceof. =/