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مo : "+erro);
}
//Hibernate: insert into alunos (alu_nome, alu_cidade, alu_fone, alu_curso, alu_codigo) values (?, ?, ?, ?, ?)
}
}
Valeu.