Olá pessoal,
Estou com uma situação na qual gostaria de criar uma generalização entre classes que eram independentes. Para não apagar todas as tabelas e relacionamentos posteriores achei melhor usar o tipo de herança table per class, seria mais ou menos como o banco já está modelado hoje.
A minha dúvida é: Como relacionar essa tabela depois a uma outra de forma polimórfica. Ex: Imagine uma classe pessoa com heranças de pessoa física e jurídica e tenho uma outra classe, por exemplo documento, que teria uma pessoa (independente de qual tipo daí a necessidade do polimorfismo aqui). Como criar a chave estrangeira na tabela Documento para que ela se relacione com as duas tabelas PessoaFisica e PessoaJuridica e como mapear isso no hibernate para ficar com um só campo:
public class Documento{
@ManyToOne
@JoinColumn(name="idPessoa")//Aqui deveria entrar pessoa física e juridica
private Pessoa pessoa;
}
Bom preciso saber se você criou um atributo no Pessoa igual coloquei a baixo…
@OneToMany(mappedBy = "documento")
private List<Documento> listDocumentos;
bom…
então vou postar como eu faço… ok?
ai depois vc adapta para seu jeito =)
[code]public class Documento{
@ManyToOne
private Pessoa pessoa;
}
public class Pessoa{
@OneToMany(mappedBy = "documento")
private List<Documento> listDocumento;
}[/code]
modifica assim e me diz o se da certo…
Não, mas eu preciso mapear a pessoa dentro do documento, um documento tem uma pessoa entendeu?
É aquele exemplo que eu citei acima mesmo, mas a questão é que eu preciso de uma chave estrangeira em um campo só mas que pode estar em duas tabelas diferentes.
Se é o que entendi… seria mais facil vc criar uma tabela com os dados comuns entre juridico e fisica que no caso seria o Pessoa… e dentro de Pessoa teria Juridico e Fisico… o Hibernate trabalharia bem fazendo assim… e voce colocaria somente as informações necessarias em suas respectivas tabelas…
bom é um sugestão…
ficaria algo mais ou menos assim… e voce nao precisaria mais usar herança;…
[code]public class Documento{
@ManyToOne
private Pessoa pessoa;
}
public class Pessoa{
@OneToMany(mappedBy = "documento")
private List<Documento> listDocumento;
@OneToOne
private Fisica fisica;
@OneToOne
private Juridica juridica;
}
public class Juridica{
@OneToOne
private Pessoa pessoa;
}
public class Fisica{
@OneToOne
private Pessoa pessoa;
}[/code]
Acho que não cara, daí eu perderia os beneficios da herança. Analisando aqui, acho que vou utilizar um InheritanceType.JOINED. Usei isso em outro projeto e acho que vai atender mais ou menos. De qualquer forma obrigado aew. Se alguem ai tiver alguma outra ideia…
Blza, mas isso ai eu implementei, só que a ultima opção…
Daí a minha dúvida é como fazer a chave estrangeira de uma outra tabela para a pessoa. Veja que no ultimo exemplo são duas tabelas diferentes, entendeu?
A classe Pessoa é aonde tem a herança certo?
e em qual classe você quer chamar a classe Pessoa?
já sabe o tipo de relacionamento entre essas classes?