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…
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
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
O ideal é você pesquisar apenas por um tipo ou apenas por outro.
Mas tem outras duas saídas:
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.
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. [=
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. ^^
[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. =/