Relacionamento Pedido e Pessoa

Boa Noite Galera…

Primeiramente gostaria de pedir desculpas se este não for o lugar certo para postar esta duvida.

Bom to com uma duvida aqui tremenda… Como eu posso fazer o relacionamento entre Pedido E Cliente…

Vou postar os código das classes a baixo acho que vai ficar mais facil de entender a minha dificuldade de raciocinio

Classe Pesso

package bean;

//Imports

@Entity
@Table(name="tbPessoa", schema="public")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="pesTipo", discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue(value="pessoa")
public class Pessoa implements Serializable, PessoaInterface {

	private static final long serialVersionUID = 1L;
	
	@Id
	@SequenceGenerator(name="genPessoa", sequenceName="genPessoa", initialValue=1)
	@GeneratedValue(generator="genPessoa", strategy=GenerationType.AUTO)
	private Integer pesCod;
	private String pesNome;
	private String pesNomeCel;
	private String pesFone;
	private String pesFax;
	private String pesCel;
	
	@OneToMany(mappedBy="pessoa")
	private List<Endereco> enderecos;
	
	public Pessoa() {
		// TODO Auto-generated constructor stub
	}

       //Getter's e Setter's
}

Classe PessoaFisica

package bean;

//Import's

@Entity
@Table(name="tbPessoaFisica")
@DiscriminatorColumn(discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue(value="pesFisica")
public class PessoaFisica extends Pessoa implements Serializable, PessoaInterface {

	private static final long serialVersionUID = 1L;
	
	private String pfCpf;
	private String pfRg;
	private String pfRgUf;
	private Date pfDtNascimento;
	private String pfNomePai;
	private String pfNomeMae;
	
	private String pfEmpresa;
	private String pfEmpresaFone;
	private String pfEmpresaAdmisao;
	private String pfEmpresaResp;
	
	public PessoaFisica() {
		// TODO Auto-generated constructor stub
	}

        //Getter's e Setter's
}

Classe PessoaJuridica

package bean;

//Import's

@Entity
@Table(name="tbPessoaJuridica")
@DiscriminatorColumn(discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue(value="pesJuridica")
public class PessoaJuridica extends Pessoa implements Serializable, PessoaInterface {

	private static final long serialVersionUID = 1L;
	
	private String pjCnpj;
	private String pjIe;
	
	public PessoaJuridica() {
		// TODO Auto-generated constructor stub
	}

        //Getter's e Setter's
}

Classe Pedido

package bean;

//Import's

@Entity
@Table(name="tbPedido", schema="public")
public class Pedido implements Serializable {

	private static final long serialVersionUID = 1L;
	
	@Id
	@SequenceGenerator(name="genPedido", sequenceName="gendPedido", initialValue=1)
	@GeneratedValue(generator="genPedido", strategy=GenerationType.AUTO)
	private Integer pedCod;
	private Date pedData;
	private Date pedDataEntrega;
	
	private Pessoa pessoa

	
	public Pedido() {
		// TODO Auto-generated constructor stub
	}
}

Ali eu Coloquei uma atributo do tipo Pessoa.

Mas o Cliente pode ser tanto Juridica como Fisica como posso fazer esta associação…

Só que eu não faço a minima ideia de como fazer isto…

Alguém poderia me dar uma luz

Muito Obrigado pela atenção de todos

Tá ai uma das principais vantagens de ser usar OO, generalização.

Faça da forma que vc está fazendo… na classe crie o atributo Pessoa genérico. Qdo precisar utilizar a pessoa do pedido faça um casting para saber qual é a especialização (tipo) pessoa.

O seu código será mais ou menos assim:

PessoaFisica pf = new PessoaFisica(); Pedido p = new Pedido() p.setPedCod(XXXX); p.setPessoa(pf);

ou

PessoaJuridica pj = new PessoaJuridica(); Pedido p = new Pedido() p.setPedCod(XXXX); p.setPessoa(pj);

e pra recuperar o dado vc faz assim:

[code]Pedido ped = DAOPedido.getPedido(XXX);
if (ped.getPessoa() instanceof PessoJuridica)
System.out.println(“pessoa juridica”);
if (ped.getPessoa() instanceof PessoFisica)
System.out.println(“pessoa fisica”);

[/code]

[quote=palmadias]Tá ai uma das principais vantagens de ser usar OO, generalização.

Faça da forma que vc está fazendo… na classe crie o atributo Pessoa genérico. Qdo precisar utilizar a pessoa do pedido faça um casting para saber qual é a especialização (tipo) pessoa.

O seu código será mais ou menos assim:

PessoaFisica pf = new PessoaFisica(); Pedido p = new Pedido() p.setPedCod(XXXX); p.setPessoa(pf);

ou

PessoaJuridica pj = new PessoaJuridica(); Pedido p = new Pedido() p.setPedCod(XXXX); p.setPessoa(pj);

e pra recuperar o dado vc faz assim:

[code]Pedido ped = DAOPedido.getPedido(XXX);
if (ped.getPessoa() instanceof PessoJuridica)
System.out.println(“pessoa juridica”);
if (ped.getPessoa() instanceof PessoFisica)
System.out.println(“pessoa fisica”);

[/code][/quote]

Eu tinha pensado em fazer desta forma mas achei que não seria o mais correto…

Mas Obrigado pela sua atenção