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();
}