Dúvida Saber Classe do Objeto No JSF

8 respostas
colored

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

8 Respostas

tmvolpato

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

Hebert_Coelho

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.
colored

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.

Hebert_Coelho

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. [=

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.

Hebert_Coelho

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.

Só toma cuidado que em muitos casos instanceof é considerado má pratica. ^^

colored

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

Hebert_Coelho

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

Criado 9 de abril de 2012
Ultima resposta 9 de abr. de 2012
Respostas 8
Participantes 3