Dúvia ao gravar um relacionamento no Hibernate

6 respostas
vinny767

Pessoal,

Estou com a seguinte dúvida… Tenho duas tabelas no banco de dados (Pessoa / Endereco) onde uma pessoa pode ter 0 ou 1 endereco.

Minhas tabelas…

PESSOA ------------- ENDERECO
id_pessoa ---------- id_endereco
nome ------------- id_pessoa
telefone --------------rua

Meu código para gravar uma pessoa:

Pessoa p1 = new Pessoa(); p1.setNome("Joao"); p1.setEmail("[email removido]"); p1.setTelefone("xx.xxxx.xxxx"); sessao.save(p1); transacao.commit(); sessao.close();

Agora eu quero salvar um endereco junto com a pessoa.

Pessoa p1 = new Pessoa(); p1.setNome("Joao"); p1.setEmail("[email removido]"); p1.setTelefone("xx.xxxx.xxxx"); Endereco e1 = new Endereco(); e1.setRua("Rua Amarela"); e1.setId_pessoa(????); p1.setEndereco(e1); sessao.save(p1); transacao.commit(); sessao.close();

Minha dúvida está no ???. O que devo colocar como argumento no método setId_Pessoa? Esse valor tem que ser o valor da PK da minha pessoa, porem, esse valor é gerado automaticamente pelo banco depois do commit. Existe alguma forma de pegar esse valor do banco antes de gravar? Qual seria a melhor solução?

Valeu!

6 Respostas

L

vinny767,

Se voce deixar null o setId_pessoa do objeto endereço eu axo q o hibernate entende o relacionamento entre eles e adiciona a chave depois de salvar o objeto pessoa nao?

ou então, o q vc pode fazer eh dar um save no objeto pessoa e em seguida dar um e1.setId_pessoa(pessoa.getKey()) e depois dar um save no objeto endereço.

Axo q essa segunda opção funciona, porém nao eh legal…

se vc conseguir fazer funcionar dando apenas um save no objeto pessoa, posta ae como vc fez q agora fiquei curioso :wink:

vinny767
Cara.. Consegui fazer. Não sei se está do jeito certo, mas tá gravando o relacionamento. Segue o Código.
public static void main(String[] args){
          Session sessao        =  HibernateUtility.getSession();
          if(sessao != null){
             Transaction transacao = sessao.beginTransaction();
             
             Pessoa p1 = new Pessoa();
             p1.setNome("Joao da Silva");
             p1.setEmail("[email removido]");
             p1.setTelefone("xx.xxxx.xxxx");
             
             Endereco e1 = new Endereco();
             e1.setPessoa(p1);
             e1.setBairro("Centro");
             e1.setCep("000000-000");
             e1.setCidade("YYYYYYYY");
             e1.setComplemento("apto 00");
             e1.setEstado("Rio de Janeiro");
             e1.setNumero(97);
             e1.setRua("Rua Amarela");
             p1.setEndereco(e1);
                          
             sessao.save(p1);
             transacao.commit();
             sessao.close();         
          } else{
              JOptionPane.showMessageDialog(null, "sessao nula!");
          }   
          
          
      }
L

opa,

legal q vc conseguiu fazer com apenas um save no objeto pessoa. Uma dúvida q tive: será q c vc tirar a linha e1.setPessoa(p1) tem o mesmo resultado no final? ou seja, irá salvar o endereço atribuindo a ele a chave do objeto pessoa?

pq nao sei c é necessário fazer o duplo relacionamento, tipo, colocar o objeto pessoa dentro do objeto endereço e o endereço dentro do pessoa, axo q c colocar o objeto filho dentro do objeto pai já funciona. Então neste seu caso vc colocando o objeto endereço dentro do objeto pessoa ja seria o suficiente…axo hehehehe

se vc puder fazer esse teste, seria interessante :smiley:

e valeu pelo post :slight_smile:

vinny767

Cara… Tive a mesma duvida. Tirei e deu pau. Gravou so a Pessoa. Coloquei de volta e gravou a pessoa e o endereco. Acho que tem que manter o duplo relacionamento mesmo!

Abraço!

L

humm, entendi

bom, eu uma vez participei de um workshop de hibernate e lembro de ter feito um exemplo igualzinho ao seu…

amanha qndo chegar no trampo eu pego esse projeto e vejo como q tah lah no exemplo, se tah um objeto dentro do outro mesmo, mas pelos testes q vc fez deve ser isso mesmo

valeu ae pela resposta!!!

tendo mais dúvidas, posta ae q tentamos ajudar!

abraço!

vinny767

Pode deixar! To cheio delas!!
Abraço!

Criado 17 de junho de 2008
Ultima resposta 17 de jun. de 2008
Respostas 6
Participantes 2