Problemas com relacionamento ManyToOne no Hibernate [ENCERRADO]
5 respostas
rfgallon
E ai pessoal blz?
Seguinte, estou com um problema no relacionamento ManyToOne do Hibernate, já procurei e fiz vários testes mas não consegui resolver.
Tenhos a Classe Unidade relacionada com Colegiado. Uma unidade por ter vários colegiados.
Na minha classe colegiado esta assim
Porém, acontece o seguinte problema, ele insere o registro nas duas tabelas, se mudo o CascadeType para REMOVE por exemplo, ele grava somente no colegiado (até ai beleza), porém na coluna do código da unidade ele grava NULL
Como está seu código? Você está associando cada objeto colegiado ao objeto unidade a que a coleção pertence?
Coloque o mapeamento das duas classes e o código de inserção. Fica mais fácil de analisar.
rfgallon
Seguem as classes
importjava.util.Date;importjavax.persistence.*;importjava.io.Serializable;@EntitypublicclassUnidadeimplementsSerializable{@Id@GeneratedValue@Column(unique=true,nullable=false)privateIntegerid;@Column(length=3)privateStringcodigo;@Column(nullable=false,length=60)privateStringdescricao;@Column(nullable=false)privateDatedtinicio;@Column(length=40)privateStringdiretor;@Column(length=40)privateStringcampi;@Column(length=40)privateStringlogradouro;@Column(length=5)privateStringnumero;@Column(length=15)privateStringcomplemento;@Column(length=30)privateStringbairro;@Column(length=9)privateStringcep;@Column(length=30)privateStringmunicipio;@Column(length=2)privateStringuf;@Column(length=15)privateStringfone;@Column(length=15)privateStringfax;@Column(length=60)privateStringemail;@Column(length=260)privateStringobservacao;/** * @return the id */publicIntegergetId(){returnid;}/** * @param id the id to set */publicvoidsetId(Integerid){this.id=id;}/** * @return the codigo */publicStringgetCodigo(){returncodigo;}/** * @param codigo the codigo to set */publicvoidsetCodigo(Stringcodigo){this.codigo=codigo;}/** * @return the descricao */publicStringgetDescricao(){returndescricao;}/** * @param descricao the descricao to set */publicvoidsetDescricao(Stringdescricao){this.descricao=descricao;}/** * @return the dtinicio */publicDategetDtinicio(){returndtinicio;}/** * @param dtinicio the dtinicio to set */publicvoidsetDtinicio(Datedtinicio){this.dtinicio=dtinicio;}/** * @return the diretor */publicStringgetDiretor(){returndiretor;}/** * @param diretor the diretor to set */publicvoidsetDiretor(Stringdiretor){this.diretor=diretor;}/** * @return the campi */publicStringgetCampi(){returncampi;}/** * @param campi the campi to set */publicvoidsetCampi(Stringcampi){this.campi=campi;}/** * @return the logradouro */publicStringgetLogradouro(){returnlogradouro;}/** * @param logradouro the logradouro to set */publicvoidsetLogradouro(Stringlogradouro){this.logradouro=logradouro;}/** * @return the numero */publicStringgetNumero(){returnnumero;}/** * @param numero the numero to set */publicvoidsetNumero(Stringnumero){this.numero=numero;}/** * @return the complemento */publicStringgetComplemento(){returncomplemento;}/** * @param complemento the complemento to set */publicvoidsetComplemento(Stringcomplemento){this.complemento=complemento;}/** * @return the bairro */publicStringgetBairro(){returnbairro;}/** * @param bairro the bairro to set */publicvoidsetBairro(Stringbairro){this.bairro=bairro;}/** * @return the cep */publicStringgetCep(){returncep;}/** * @param cep the cep to set */publicvoidsetCep(Stringcep){this.cep=cep;}/** * @return the municipio */publicStringgetMunicipio(){returnmunicipio;}/** * @param municipio the municipio to set */publicvoidsetMunicipio(Stringmunicipio){this.municipio=municipio;}/** * @return the uf */publicStringgetUf(){returnuf;}/** * @param uf the uf to set */publicvoidsetUf(Stringuf){this.uf=uf;}/** * @return the fone */publicStringgetFone(){returnfone;}/** * @param fone the fone to set */publicvoidsetFone(Stringfone){this.fone=fone;}/** * @return the fax */publicStringgetFax(){returnfax;}/** * @param fax the fax to set */publicvoidsetFax(Stringfax){this.fax=fax;}/** * @return the email */publicStringgetEmail(){returnemail;}/** * @param email the email to set */publicvoidsetEmail(Stringemail){this.email=email;}/** * @return the observacao */publicStringgetObservacao(){returnobservacao;}/** * @param observacao the observacao to set */publicvoidsetObservacao(Stringobservacao){this.observacao=observacao;}/* (non-Javadoc) * @see java.lang.Object#hashCode() */@OverridepublicinthashCode(){returnthis.getId();}/* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */@Overridepublicbooleanequals(Objectobj){if(objinstanceofUnidade){Unidadeunidade=(Unidade)obj;if(unidade.getId()==this.getId())returntrue;returnfalse;}returnfalse;}}
Colegiado
importjava.io.Serializable;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.Id;importjavax.persistence.JoinColumn;importjavax.persistence.ManyToOne;@EntitypublicclassColegiadoimplementsSerializable{@Id@GeneratedValue@Column(unique=true,nullable=false)privateIntegerid;@Column(nullable=false,length=60)privateStringdescricao;@ManyToOne@JoinColumn(name="idunidade",nullable=false)privateUnidadeunidade;@Column(length=40)privateStringresponsavel;@Column(length=15)privateStringfone;@Column(length=15)privateStringfax;@Column(length=60)privateStringemail;/** * @return the id */publicIntegergetId(){returnid;}/** * @param id the id to set */publicvoidsetId(Integerid){this.id=id;}/** * @return the descricao */publicStringgetDescricao(){returndescricao;}/** * @param descricao the descricao to set */publicvoidsetDescricao(Stringdescricao){this.descricao=descricao;}/** * @return the unidade */publicUnidadegetUnidade(){returnunidade;}/** * @param unidade the unidade to set */publicvoidsetUnidade(Unidadeunidade){this.unidade=unidade;}/** * @return the responsavel */publicStringgetResponsavel(){returnresponsavel;}/** * @param responsavel the responsavel to set */publicvoidsetResponsavel(Stringresponsavel){this.responsavel=responsavel;}/** * @return the fone */publicStringgetFone(){returnfone;}/** * @param fone the fone to set */publicvoidsetFone(Stringfone){this.fone=fone;}/** * @return the fax */publicStringgetFax(){returnfax;}/** * @param fax the fax to set */publicvoidsetFax(Stringfax){this.fax=fax;}/** * @return the email */publicStringgetEmail(){returnemail;}/** * @param email the email to set */publicvoidsetEmail(Stringemail){this.email=email;}/* (non-Javadoc) * @see java.lang.Object#hashCode() */@OverridepublicinthashCode(){returnthis.getId();}/* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */@Overridepublicbooleanequals(Objectobj){if(objinstanceofColegiado){Colegiadocolegiado=(Colegiado)obj;if(colegiado.getId()==this.getId())returntrue;returnfalse;}returnfalse;}}
esse objeto colegiado possui um objeto unidade setado com o ID da unidade que será referenciado?
rfgallon
rgf
Obrigado pela ajuda, quem seta os valores é o framework que estou utilizando, estou achando que existe um bug que esta causando isso, pois fiz testes em outras versões e o comportamente foi outro
Vou verificar como pessoal do forum do mentawai para ver se alguém já viu o erro
rfgallon
Pessoal hoje pela manhã realizei alguns testes com Hibernate puro e funcionou corretamente, desta forma, encerro este tópico, e irei verificar o mentawai.
Obrigado a todos que ajudaram