Hibernate - Relacionamento 1:1

0 respostas
trevezani

Ola amigos,

Estou desenvolvendo um pequeno programa para que eu possa estudar o Hibernate só que estou tendo 1 probleminha com um relacionamento 1:n. Consigo incluir normalmente só que quando eu altero o registro é duplicado. Estou fazendo um cadastro de Edição de revistas e neste cadastro eu informo a revista. Quando eu altero o registro e mudo a revista, que é um objeto, o registro de Edição é duplicado. Alguém sabe como resolver este problema? Abaixo estão meus códigos.

public class Edicao {
    private Long    IdEdicao;
    private int     Numero;
    private Revista revista;
    
    public Long getIdEdicao() {
        return this.IdEdicao;
    }  
    
    public void setIdEdicao(Long idedicao) {
        this.IdEdicao = idedicao;
    }
    
    public int getNumero() {
        return this.Numero;
    }  
    
    public void setNumero(int numero) {
        this.Numero = numero;
    }
    
    public Revista getRevista() {
        return this.revista;
    }
    
    public void setRevista(Revista myRevista) {
        this.revista = myRevista;
    }
}
<?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="model.Edicao" table="edicao">
        <id name="IdEdicao" column="idedicao" type="long">
            <generator class="increment"/>
        </id>        

        <property    name="Numero" 
                     column="numero"
                     type="int"/>
        
        <one-to-one name="revista" 
                    class="model.Revista" 
                    cascade ="save-update"/>
    </class>
</hibernate-mapping>
public class Revista {
    private Long   IdRevista;
    private String Nome;

    public Long getIdRevista() {
        return this.IdRevista;
    }  
    
    public void setIdRevista(Long idrevista) {
        this.IdRevista = idrevista;
    }
    
    public String getNome() {
        return this.Nome;
    }  
    
    public void setNome(String nome) {
        this.Nome = nome;
    }
}
<?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="model.Revista" table="revista">
        <id name="IdRevista" column="idrevista" type="long">
            <generator class="increment"/>
        </id>        

        <property name="Nome" column="nome" type="string"/>
    </class>
</hibernate-mapping>

Meu código de inclusão e alteração:

Transaction transaction = sessao.beginTransaction(); //Iniciando uma transação
        edicao.setRevista( revista );
        edicao.setNumero ( intNumero );
        sessao.save(edicao); //Transformando o objeto transiente em um objeto
        //persistente no banco de dados
        transaction.commit(); //Finalizando a transação

Antes de executar o código acima no create do meu formulário eu executo o codigo.

if (Opcao.equals("A")) {
            edicao  = (Edicao)sessao.get(Edicao.class, lngID);
            revista = edicao.getRevista();
        }
        else {
            edicao = new Edicao();
        }
Criado 31 de julho de 2006
Respostas 0
Participantes 1