Problema Mapeamento de Relacionamento

Bom Seguinte… Tenho 1 Tabela Cliente… Que tem Relacionamento Com PessoaFisica e Juridica, essa tabela Cliente são os dados comuns entre os 2 tipos.

[URL=http://img269.imageshack.us/i/diagramaguj.jpg/][/URL]

A Pk de Cliente. eh FK e PK em PEssoa Fisica e Juridica…

Como Fica O Mapeamento Disso, Tipo eu Tentei

@Id
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID")
	private Cliente cliente;
	

Mas Sem Chance :confused:

Eu tb Pensei em Criar um ID, so pra fazer cena e colocar akela Annotation que não persiste o atributo não se da certo neh.

Alguem tem Ideia Como eu faço isso?
Mto Obrigado :smiley:

Fala ai colored , blz ?

existem 3 tipos de mapeamento

Herança JOINED - Flexível e bom para otimizar espaço de armazenamento e quando existem vários relacionamentos em comum.

Coloquei os mapeamento do banco e da classe nas imagens anexadas


@Entity 
@Inheritance(strategy=InheritanceType.JOINED)‏ 
@DiscriminatorColumn(name="TIPO")‏ 
public abstract class Pessoa{?} 


@Entity 
@DiscriminatorValue("FISICA")‏ 
public class PessoaFisica extends Pessoa{?} 


@Entity 
@DiscriminatorValue("JURIDICA")‏ 
public class PessoaJuridica extends Pessoa{?} 

Single Table - A melhor opção quando é necessário desempenho em consultas polimórficas e espaço de armazenamento não é problema 

@Entity 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)‏ 
@DiscriminatorColumn(name="TIPO")‏ 
public abstract class Pessoa{?} 

@Entity 
@DiscriminatorValue("FISICA")‏ 
public class PessoaFisica extends Pessoa{?} 

@Entity 
@DiscriminatorValue("JURIDICA")‏ 
public class PessoaJuridica extends Pessoa{?} 

Table per Class - Indicado quando não existem muitos relacionamentos em comum e a herança é mais conceitual do ponto de vista de negócios 

@Entity 
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)‏ 
public abstract class Pessoa{?} 

@Entity 
public class PessoaFisica extends Pessoa{?} 


@Entity 
public class PessoaJuridica extends Pessoa{?} 

Agora a analise de qual se encaixa melhor, é com voce





Cherubini eai. :smiley:

então eu dei uma pesquisada pra resolver isso achei uma assim…
e conseguiu fazer o q eu keria…

@Entity
@Table(name = "Cliente")
@Inheritance(strategy = InheritanceType.JOINED)
public class Client {
	
	@Id
	@GeneratedValue
	private int id;
@Entity
@Table(name = "PessoaFisica")
@PrimaryKeyJoinColumn(name="Cliente_id")
public class PF extends Client{
	
	private String rg;

No meu exemplo o relacionamento…
Eu tenho Cliente Com PF.
Porem Tenho tb NEsse Eskema Cliente - PJ - Colaborador - Usuario

Não sei em qual me encaixo eu tinha utilizado Joined…
mas agora q vc me mostro esse leque de opções fico dificil saber :smiley:

entao veio, tem q ver qual te atende mais!

se vc quer deixar tudo em uma tabela ou criar duas ou criar as 3!

vc tem q ver, com sera melhor para o seu sistema!!!

EU costumo usar o Single !

mais ai depende de vc! xD

abraços xD

Vo ir de Joined MEsmo…

Pra q serve esse DiscriminatorColumn???

serve para vc saber qual é a classe (fisica ou jurica) ai nele vc pode falar tambem
qual tipo é esse campo.

exemplo:

@DiscriminatorColumn(name="tipo",discriminatorType=DiscriminatorType.INTEGER)   

nome do campo é tipo e ele vai ser um integer

o name pode ser oq vc quiser ! xD

tendeu ?

olha no exemplo que te passei(imagem) la tem um campo tipo, so que nao mencionei o tipo ele criar String(varchar) xD

Mas do jeito q eu fiz… Funciona Tranquilamente tambem neh???

Sim veio, sussinha !! :smiley:

qualquer um dois jeitos funciona !

o JOINED é o mais comum

pode usar sem problema ! :wink:

Que bom, vai assim mesmo por enquanto…

Valeo mano… Brigadao :smiley:

De nada cara!

as ordens ! ^^