relacionamento recursivo no Hibernate  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
ana_abrantes
JavaGuru
[Avatar]

Membro desde: 29/08/2003 15:44:09
Mensagens: 238
Localização: São Paulo
Offline

Estou usando o Hibernate num pequeno projeto e já fiz alguns relacionamentos, one-to-many e many-to-one com algumas tabelas.
Mas tem uma tabela que tem um relacionamento recursivo que não consegui fazer funcionar ainda.

Exemplo do caso que estou com problema:
Tabela Pessoa
Codigo int(11)
Nome varchar(40)
Codigo_pai int(11)

Codigo: 1, Nome: Fulano de Tal, Codigo_pai: 0
Codigo: 2, Nome: José da Silva, Codigo_pai: 1

São 2 problemas que preciso resolver:
1) como fazer esse relacionamento no hibernate
2) como permitir que em alguns casos ele aceite que não existe um codigo_pai

Se alguém puder ajudar, agradeço muito, pois já pesquisei em vários lugares e tentei de várias maneiras e não deu certo.

Ana

SCJP 1.4 - SCWCD 1.4
ricardolecheta
GUJ Master
[Avatar]

Membro desde: 17/05/2003 13:42:10
Mensagens: 1486
Localização: Curitiba
Offline

basta fazer um many-to-one para a própria classe.

Ricardo R. Lecheta
Livro - Google Android (português)
http://www.livroandroid.com.br/
http://livroandroid.blogspot.com/
http://www.livetouch.com.br/
ana_abrantes
JavaGuru
[Avatar]

Membro desde: 29/08/2003 15:44:09
Mensagens: 238
Localização: São Paulo
Offline

Foi exatamente o que fiz e não deu certo !!!

Ana

SCJP 1.4 - SCWCD 1.4
TedLoprao
Virtual Machine Man
[Avatar]

Membro desde: 09/05/2003 00:32:03
Mensagens: 607
Offline

Mas deu algum erro???

Um problema q tive foi quando, por exemplo o auto-relacionamento era com o próprio objeto (a base de dados q estou trabalhando é de um sistema legado e nesse sistema esse tipo de coisa podia acontecer)...

Não sei se existe uma maneira de contornar esse problema!!

Rodrigo Klein
----------------------------------------------------
Java is the best
ana_abrantes
JavaGuru
[Avatar]

Membro desde: 29/08/2003 15:44:09
Mensagens: 238
Localização: São Paulo
Offline

Erro não mas não funciona como esperado.
Acontecem 2 coisas erradas:
Primeiro, não aceita que algum registro tenha o campo codigo_pai sem um correspondente, ou seja, com valor=0.
Segundo, ao invés de trazer o registro correspondente, traz o mesmo, como se o codigo_pai estivesse indicando o próprio registro!

Ana

SCJP 1.4 - SCWCD 1.4
ana_abrantes
JavaGuru
[Avatar]

Membro desde: 29/08/2003 15:44:09
Mensagens: 238
Localização: São Paulo
Offline

Eis o mapeamento desta classe para vocês me entenderem melhor:


pessoaPai teria que me retorna o registro correspondente ao pai e pessoaFilho foi colocado para fazer o inverso, ou seja, trazer todos que tiverem um mesmo pai.

Ana

SCJP 1.4 - SCWCD 1.4
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

Ana vc ta com o mapping errado, comparei com um caso onde tive o mesmo problema e creio que o correto seja:



Note que a diferença esta em many-to-one -> column

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
ana_abrantes
JavaGuru
[Avatar]

Membro desde: 29/08/2003 15:44:09
Mensagens: 238
Localização: São Paulo
Offline

Valeu, louds, obrigada, agora está trazendo o pai correspondente!!!

Só que no caso de eu não ter um pai, ou seja, codigo_pessoa_pai = 0, está dando exception... tem como resolver isso também?
Senão vai ficar um relacionamento infinito, concorda?

Ana

SCJP 1.4 - SCWCD 1.4
ricardolecheta
GUJ Master
[Avatar]

Membro desde: 17/05/2003 13:42:10
Mensagens: 1486
Localização: Curitiba
Offline

ana_abrantes wrote:Valeu, louds, obrigada, agora está trazendo o pai correspondente!!!

Só que no caso de eu não ter um pai, ou seja, codigo_pessoa_pai = 0, está dando exception... tem como resolver isso também?
Senão vai ficar um relacionamento infinito, concorda?


porque fica codigo_pessoa_pai = 0? deveria ficar "null". Então o objeto pessoaPai simplesmente estará null se não existir pai.

Ricardo R. Lecheta
Livro - Google Android (português)
http://www.livroandroid.com.br/
http://livroandroid.blogspot.com/
http://www.livetouch.com.br/
ana_abrantes
JavaGuru
[Avatar]

Membro desde: 29/08/2003 15:44:09
Mensagens: 238
Localização: São Paulo
Offline

Se eu deixar o atributo pessoaPai (que é da classe Pessoa) com 'null', dá NullPointerException na hora que eu mando executar o método 'save' em Pessoa...

Ana

SCJP 1.4 - SCWCD 1.4
ricardolecheta
GUJ Master
[Avatar]

Membro desde: 17/05/2003 13:42:10
Mensagens: 1486
Localização: Curitiba
Offline

ana_abrantes wrote:Se eu deixar o atributo pessoaPai (que é da classe Pessoa) com 'null', dá NullPointerException na hora que eu mando executar o método 'save' em Pessoa...


impossível

Se vc fizer assim, da NullPointer ? Veja a linha do NullPointer, pode ser em outro lugar, manda o stackTrace

Ricardo R. Lecheta
Livro - Google Android (português)
http://www.livroandroid.com.br/
http://livroandroid.blogspot.com/
http://www.livetouch.com.br/
ana_abrantes
JavaGuru
[Avatar]

Membro desde: 29/08/2003 15:44:09
Mensagens: 238
Localização: São Paulo
Offline

Foi exatamente na linha do save...



Está mais ou menos assim, é que eu não estou com o código aqui agora...
Só à noite que vou poder mexer nele de novo.

O campo PESSOA_PAI do form é um select com todas as pessoas e eu acrescentei uma com o código 0 e descrição em branco para este caso de não ter o pai.

Ana

SCJP 1.4 - SCWCD 1.4
ana_abrantes
JavaGuru
[Avatar]

Membro desde: 29/08/2003 15:44:09
Mensagens: 238
Localização: São Paulo
Offline

Verifiquei e é isto mesmo que eu tinha postado anteriormente.

Sei lá, acho que se eu tiver que criar uma pessoa com código zero é estranho demais!

Tem mais alguma sugestão para me dar, Ricardo... louds... ?

Ana

SCJP 1.4 - SCWCD 1.4
urubatan
Moderador
[Avatar]

Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline

troca o tipo no objeto para Integer em vez de int que funciona direitinho, ai quando não tiver nada associado fica como null, que representa exatamente isto.

PS.: desculpe se ja sugeriram isto, mas realmente não li todas as mensagens da thread.

[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
[WWW]
slmasked
Smalltalk

Membro desde: 08/05/2007 01:53:04
Mensagens: 1
Offline

estou com o mesmo problema da ana.....
alguém poderia dar umas dicas...urgente..
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team