Fórum Auxílio para implementar o cadastro de Cliente que pode ser PessoaFisica ou PessoaJuridica #521470
30/05/2015
0
Oi, pessoal, estou precisando de ajuda para resolver o seguinte problema:
- Estou desenvolvendo (utilizando JPA, JSF e PrimeFaces) alguns cadastros (ex: cliente) onde estou utilizando Herança e Composição para implementar o relacionamento das seguintes classes:
1 - Pessoa (abstrata)
2 - PessoaFisica e PessoaJuridica (herdam de Pessoa)
3 - Cliente (possui um atributo de Pessoa, uma vez que pode ser tanto PessoaFisica ou PessoaJuridica)
- A princípio defini na classe Cliente um atributo tipoDePessa, que é um enum composto por FISICA e JURIDICA, onde a ideia é: vincular os valores deste enum a um "p:selectOneRadio" para que dependendo do tipo que for selecionado (FISICO ou JURIDICO) instanciar o objeto Pessoa como PessoaFisica ou PessoaJuridica.
- Andei estudando o evento "onchange" para ser utilizado na vinculação de um método que verifique o tipo selecionado e então faça a instanciação, porém não consegui (não sei como fazer) como passar os dados selecionados na página xhtm para o Bean.
Agradeço se puderem me auxiliar na forma de como instanciar um objeto Pessoa dependendo do tipo que for selecionado, ou caso esta não seja a melhor solução, qual seria uma outra e como implementá-la.
- Abaixo estão as classes implementas:
1- Pessoa:
2- Pessoa Física:
3- Peessoa Jurídica
4- Cliente
- Estou desenvolvendo (utilizando JPA, JSF e PrimeFaces) alguns cadastros (ex: cliente) onde estou utilizando Herança e Composição para implementar o relacionamento das seguintes classes:
1 - Pessoa (abstrata)
2 - PessoaFisica e PessoaJuridica (herdam de Pessoa)
3 - Cliente (possui um atributo de Pessoa, uma vez que pode ser tanto PessoaFisica ou PessoaJuridica)
- A princípio defini na classe Cliente um atributo tipoDePessa, que é um enum composto por FISICA e JURIDICA, onde a ideia é: vincular os valores deste enum a um "p:selectOneRadio" para que dependendo do tipo que for selecionado (FISICO ou JURIDICO) instanciar o objeto Pessoa como PessoaFisica ou PessoaJuridica.
- Andei estudando o evento "onchange" para ser utilizado na vinculação de um método que verifique o tipo selecionado e então faça a instanciação, porém não consegui (não sei como fazer) como passar os dados selecionados na página xhtm para o Bean.
Agradeço se puderem me auxiliar na forma de como instanciar um objeto Pessoa dependendo do tipo que for selecionado, ou caso esta não seja a melhor solução, qual seria uma outra e como implementá-la.
- Abaixo estão as classes implementas:
1- Pessoa:
@Entity
@Table(name = "PESSOAS")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "PESS_TIPO")
public abstract class Pessoa implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "PESS_CODIGO", nullable = false)
private Integer codigo;
@Column(name = "PESS_NOME", length = 100, nullable = false)
private String nome;
@Enumerated(EnumType.STRING)
@Column(name = "PESS_TIPO_PESSOA", nullable = false)
private PessoaType tipoPessoa;
@Column(name = "PESS_FONE", length = 20, nullable = false)
private String telefone;
@OneToOne(mappedBy = "pessoa")
private Endereco endereco;
@Column(name = "PESS_OBSERVACAO", length = 255, nullable = true)
private String observacao;
@Column(name = "PESS_STATUS", length = 1, nullable = false)
private Boolean status;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "PESS_DATA_CADASTRO", nullable = false)
private Date dataCadastro;
@Version
@Column(name = "PESS_DATA_ALTERACAO", nullable = false)
private Timestamp dataAlteracao;
protected Pessoa() {
}
protected Pessoa(Integer codigo, String nome String telefone, Endereco endereco,
String observacao, Boolean status, Date dataCadastro, Timestamp dataAlteracao) {
this.codigo = codigo;
this.nome = nome;
this.telefone = telefone;
this.endereco = endereco;
this.observacao = observacao;
this.status = status;
this.dataCadastro = dataCadastro;
this.dataAlteracao = dataAlteracao;
}
/* Getters e Setters
}2- Pessoa Física:
@Entity
@Table(name = "PESSOA_FISICA")
@DiscriminatorValue(value = "PF")
@PrimaryKeyJoinColumn(name = "PESS_CODIGO")
public class PessoaFisica extends Pessoa implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "PESF_CPF", length = 14, nullable = false)
private String cpf;
@Column(name = "PESF_RG", length = 14, nullable = false)
private String rg;
@Column(name = "PESF_ORGAO_EMISSOR_RG", length = 20, nullable = false)
private String orgaoEmissorRg;
@Column(name = "PESF_EMAIL", length = 65, nullable = true)
private String email;
@Column(name = "PESF_CELULAR", length = 14, nullable = true)
private String celular;
@Lob
@Column(name = "PESF_FOTO", nullable = true)
private byte[] foto;
@Temporal(TemporalType.DATE)
@Column(name = "PESF_DATA_NASCIMENTO", nullable = false)
private Date dataNascimento;
@Enumerated(EnumType.STRING)
@Column(name = "PESF_SEXO", nullable = false)
private SexoType sexo;
@OneToMany(mappedBy = "cliente")
private List<PedidoVenda> pedidos;
public PessoaFisica() {
}
public PessoaFisica(String cpf, String rg, String orgaoEmissorRg, String email, String celular, byte[] foto,
Date dataNascimento, SexoType sexo) {
this.cpf = cpf;
this.rg = rg;
this.orgaoEmissorRg = orgaoEmissorRg;
this.email = email;
this.celular = celular;
this.foto = foto;
this.dataNascimento = dataNascimento;
this.sexo = sexo;
}
/* Getters e Setters
}3- Peessoa Jurídica
@Entity
@Table(name = "PESSOA_JURIDICA")
@DiscriminatorValue(value = "PJ")
@PrimaryKeyJoinColumn(name = "PESS_CODIGO")
public class PessoaJuridica extends Pessoa implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "PESJ_NOME_FANTASIA", length = 100, nullable = false)
private String nomeFantasia;
/* 00.000.000/0001-00
@Column(name = "PESJ_CNPJ", length = 14, nullable = false)
private String cnpj;
@Column(name = "PESJ_INSCRICAO_ESTADUAL", length = 15, nullable = false)
private String inscricaoEstadual;
@Temporal(TemporalType.DATE)
@Column(name = "PESJ_VALIDADE_INSCRICAO_ESTADUAL", nullable = false)
private Date validadeInscricaoEstadual;
@Column(name = "PESJ_INSCRICAO_MUNICIPAL", length = 15, nullable = true)
private String inscricaoMunicipal;
@Column(name = "PESJ_HOME_PAGE", length = 100, nullable = true)
private String homePage;
@Column(name = "PESJ_FAX", length = 15, nullable = true)
private String fax;
public PessoaJuridica() {
}
public PessoaJuridica(String nomeFantasia, String cnpj, String inscricaoEstadual, Date validadeInscricaoEstadual,
String inscricaoMunicipal, String homePage, String fax) {
this.nomeFantasia = nomeFantasia;
this.cnpj = cnpj;
this.inscricaoEstadual = inscricaoEstadual;
this.validadeInscricaoEstadual = validadeInscricaoEstadual;
this.inscricaoMunicipal = inscricaoMunicipal;
this.homePage = homePage;
this.fax = fax;
}
/* Getters e Setters
}4- Cliente
@Entity
@Table(name = "CLIENTES")
public class Cliente implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "CLIE_CODIGO", nullable = false)
private Integer codigo;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "PESS_CODIGO", nullable = false)
private Pessoa pessoa;
@Enumerated(EnumType.STRING)
@Column(name = "CLIE_TIPO_PESSOA", nullable = false)
private PessoaType tipoPessoa;
public Cliente() {
}
public Cliente(Integer codigo, Pessoa pessoa, PessoaType tipoPessoa) {
this.codigo = codigo;
this.pessoa = pessoa;
this.tipoPessoa = tipoPessoa;
}
/* Getters e Setters
}Marcelo
Curtir tópico
+ 0
Responder
Posts
02/06/2015
Marcelo
----
Responder
Gostei + 0
06/06/2015
Marcelo
--- .
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)