dúvida one-to-many Hibernate

0 respostas
A

Pessoal tenho o seguite problema:

Tenho uma tabela pessoa e outra endereco, uma pessoa tem varios endereços, quando eu insiro via hibernate uma pessoa e mais de um endereco para essa pessoa o hibernate esta atualizando a fk do endereco anterior como NULL e isso não é para acontecer, alguem pode me ajudar?

Pessoa.java

package onetomany_unidirecional;
import java.util.Set;
public class Pessoa
{
    private int id_pessoa;
    private String nome_pessoa;
    private Set endereco;

    /**
     * @return the id_pessoa
     */
    public int getId_pessoa() {
        return id_pessoa;
    }

    /**
     * @param id_pessoa the id_pessoa to set
     */
    public void setId_pessoa(int id_pessoa) {
        this.id_pessoa = id_pessoa;
    }

    /**
     * @return the nome_pessoa
     */
    public String getNome_pessoa() {
        return nome_pessoa;
    }

    /**
     * @param nome_pessoa the nome_pessoa to set
     */
    public void setNome_pessoa(String nome_pessoa) {
        this.nome_pessoa = nome_pessoa;
    }

    /**
     * @return the endereco
     */
    public Set getEndereco() {
        return endereco;
    }

    /**
     * @param endereco the endereco to set
     */
    public void setEndereco(Set endereco) {
        this.endereco = endereco;
    }

    /**
     * @return the endereco
     */   

}

Endereco.java

package onetomany_unidirecional;

public class Endereco {
    private int id_endereco;
    private String desc_endereco;
    /**
     * @return the id_endereco
     */
    public int getId_endereco() {
        return id_endereco;
    }

    /**
     * @param id_endereco the id_endereco to set
     */
    public void setId_endereco(int id_endereco) {
        this.id_endereco = id_endereco;
    }

    /**
     * @return the desc_endereco
     */
    public String getDesc_endereco() {
        return desc_endereco;
    }

    /**
     * @param desc_endereco the desc_endereco to set
     */
    public void setDesc_endereco(String desc_endereco) {
        this.desc_endereco = desc_endereco;
    }

    /**
     * @return the pessoa
     */

}

pessoa_endereco.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="onetomany_unidirecional.Pessoa" table="pessoa">
        <id column="id_pessoa" name="id_pessoa" type="int">
            <generator class="assigned"/>
        </id>
        <property name="nome_pessoa"/>
        <set cascade="all" name="endereco" table="endereco" inverse="false">
            <key column="idPessoa" foreign-key="fk_pessoa"/>
            <one-to-many class="onetomany_unidirecional.Endereco"/>
        </set>
    </class>
    <class name="onetomany_unidirecional.Endereco" table="endereco">
        <id column="id_endereco" name="id_endereco" type="int">
            <generator class="assigned"/>
        </id>
        <property name="desc_endereco"/>
    </class>
</hibernate-mapping>
package onetomany_unidirecional;

import java.util.HashSet;
import java.util.Set;
import javax.swing.*;
import org.hibernate.*;
import org.hibernate.cfg.*;
public class grava_pessoa_endereco
{
     public static void main(String [] args)
     {
         try
         {
             SessionFactory fabrica = new Configuration().configure().buildSessionFactory();
             Session sessao = fabrica.openSession();

             Pessoa obj_pessoa = new Pessoa();
             obj_pessoa.setId_pessoa(1);
             obj_pessoa.setNome_pessoa("Neri Aldoir Neitzke2");

             // n?o ter gravar aqui -> sessao.save(obj_pessoa);

             Endereco obj_endereco = new Endereco();
             obj_endereco.setId_endereco(5);
             obj_endereco.setDesc_endereco("Rua Colorado Sampaio2");

             obj_pessoa.setEndereco(new HashSet<Endereco>());
             obj_pessoa.getEndereco().add(obj_endereco);


             // n?i tem ->sessao.save(obj_endereco);

             Transaction tx_pessoa = sessao.beginTransaction();
             sessao.saveOrUpdate(obj_pessoa);
             tx_pessoa.commit();
             sessao.close();
         }
         catch(Exception erro)
         {
             JOptionPane.showMessageDialog(null,"Erro na insers&#1605;o : "+erro);
         }
         //Hibernate: insert into alunos (alu_nome, alu_cidade, alu_fone, alu_curso, alu_codigo) values (?, ?, ?, ?, ?)


     }
}

Valeu.

Criado 13 de outubro de 2010
Respostas 0
Participantes 1