Mapeamento de classe recursiva

Acho que aqui é mais apropriado… :slight_smile:

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

Tenho uma classe:

[code]@Entity
public class Pessoa {
@Id
private int id;
private String nome;
private Pessoa pai;
private Pessoa filho;

 gets and sets

}[/code]

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

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

Classe recursiva??? :shock:

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.

Cara, nunca gerei as tabelas do bd pelo hibernate.

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…

[quote=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…[/quote]

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

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í!

[quote=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í!
[/quote]

Valeu Roberto…

Vou ar uma testada e qlq coisa grito…

abraço

Blz!

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