Mapeamento de classe recursiva

9 respostas
F

Acho que aqui é mais apropriado... :)

Estou com um probleminha pra resolver mas ainda não cheguei a uma conclusão real.

Tenho uma classe:
@Entity
public class Pessoa {
     @Id
     private int id;
     private String nome;
     private Pessoa pai;
     private Pessoa filho;

     gets and sets

}

Preciso mapear essa classe no banco de dados. Estou utilizando, EJB3, Hibernate.

Alguém pode me dar uma luz de como vai ficar a tabela no banco de dados e o relacionamento (annotations) na classe?

Muito obrigado

Abraço

9 Respostas

D

Bem, o hibernate já faz a tabela no banco, não?

D

Classe recursiva??? :shock:

F

Haha

Mais ou menos isso…

Uma classe que tem como atributo um obj do seu próprio tipo…

No caso uma pessoa tem um pai que tbm é uma pessoa.

F

Cara, nunca gerei as tabelas do bd pelo hibernate.

R

Pelo seu modelo, um pai pode ter apenas um filho… está correto?

Vc pode usar JPA para mapear…

ex.:

@ManyToOne @JoinColumn(name = "ID_PAI", nullable = false) public Pessoa getPai() { return this.pai }

No BD isto deve virar uma coluna com o id referenciando outra linha da tabela…

F

robertol:
Pelo seu modelo, um pai pode ter apenas um filho… está correto?

Vc pode usar JPA para mapear…

ex.:

@ManyToOne @JoinColumn(name = "ID_PAI", nullable = false) public Pessoa getPai() { return this.pai }

No BD isto deve virar uma coluna com o id referenciando outra linha da tabela…

Blz Roberto,

Na verdade uma Pessoa vai ter UM pai e pode ter UM ou MAIS filhos…

Não entendo como ficaria a criação do bd com uma linha referenciando outra. =S

Abraço

R

no BD será criada um FK com referencia para a propria tabela… algo assim:

alter table pessoa
add constraint fk_pessoa_pai foreign key (id_pai) references pessoa(id)

Ou seja, a coluna da linha que representa o filho referenciará o id da linha que representa o pai.

Para ter mais de um filho, vc deve mapear como List<Pessoa> e usar mapeamento OneToMany, preferencialmente no seu getter.

Qualquer dúvida posta aí!

F

robertol:
no BD será criada um FK com referencia para a propria tabela… algo assim:

alter table pessoa
add constraint fk_pessoa_pai foreign key (id_pai) references pessoa(id)

Ou seja, a coluna da linha que representa o filho referenciará o id da linha que representa o pai.

Para ter mais de um filho, vc deve mapear como List<Pessoa> e usar mapeamento OneToMany, preferencialmente no seu getter.

Qualquer dúvida posta aí!

Valeu Roberto…

Vou ar uma testada e qlq coisa grito…

abraço

R

Blz!

Qualquer dúvida, posta aê que a gente ajuda! :smiley:

Criado 21 de fevereiro de 2011
Ultima resposta 21 de fev. de 2011
Respostas 9
Participantes 4