Erro em jpa -- Repeated column in mapping for entity
2 respostas
donatinho
Bom dia pessoal!
Estou passando pelo seguinte problema. Tenho tres classes que estao mapeadas conforme abaixo:
@Entity@Table(name="TBPERMISSAO_EMISSOR_CTE")publicclassTbpermissaoEmissorCteimplementsSerializable{@EmbeddedIdprivateTbpermissaoEmissorCtePKpk;@ManyToOne@JoinColumn(name="CD_SITUACAO_CADASTRAL")privateSituacaoCadastralcdSituacaoCadastral;@Column(name="NM_EMISSOR")privateStringnmEmissor;@Column(name="SINCRONIZADO_AN")privateStringsincronizadoAn;@Column(name="SITUACAO_BLOQUEIO")privateStringsituacaoBloqueio;privateStringnsucne;@OneToMany(mappedBy="tbpermissaoEmissorCte")privateSet<Tbinutilizacao>tbinutilizacaoCollection;@OneToMany(mappedBy="tbpermissaoEmissorCte")privateSet<TbhistBloqueioRecfCte>tbhistBloqueioRecfCteCollection;@OneToMany(mappedBy="tbpermissaoEmissorCte")privateSet<TbHistObrigatoriedadeCte>tbhistObrigatoriedadeCteCollection;@OneToMany(mappedBy="tbpermissaoEmissorCte")privateSet<TbmodalEmissor>tbmodalEmissors;privatestaticfinallongserialVersionUID=1L;publicTbpermissaoEmissorCte(){super();}/***Construtor***/publicTbpermissaoEmissorCte(TbpermissaoEmissorCtePKpk,SituacaoCadastralcdSituacaoCadastral,StringnmEmissor,Set<Tbinutilizacao>tbinutilizacaoCollection){super();this.pk=pk;this.cdSituacaoCadastral=cdSituacaoCadastral;this.nmEmissor=nmEmissor;this.tbinutilizacaoCollection=tbinutilizacaoCollection;}publicTbpermissaoEmissorCte(TbpermissaoEmissorCtePKpk,SituacaoCadastralcdSituacaoCadastral,StringnmEmissor){super();this.pk=pk;this.cdSituacaoCadastral=cdSituacaoCadastral;this.nmEmissor=nmEmissor;}/** * Construtor que seria usado pelo CTE_INTEGRACAO, pois tem os campos * prorpios do mesmo: NSUCNE,SINCRONIZADO_AN,SITUACAO_BLOQUEIO * @04/11/2009 * @denize.lopes */publicTbpermissaoEmissorCte(TbpermissaoEmissorCtePKpk,SituacaoCadastralcdSituacaoCadastral,StringnmEmissor,StringnsuCNE,StringsincrozinadoAN,StringsituacaoBloqueio){super();this.pk=pk;this.cdSituacaoCadastral=cdSituacaoCadastral;this.nmEmissor=nmEmissor;this.nsucne=nsuCNE;this.sincronizadoAn=sincrozinadoAN;this.situacaoBloqueio=situacaoBloqueio;}/***Construtor***/publicTbpermissaoEmissorCtePKgetPk(){returnthis.pk;}publicvoidsetPk(TbpermissaoEmissorCtePKpk){this.pk=pk;}publicSituacaoCadastralgetCdSituacaoCadastral(){returnthis.cdSituacaoCadastral;}publicvoidsetCdSituacaoCadastral(SituacaoCadastralcdSituacaoCadastral){this.cdSituacaoCadastral=cdSituacaoCadastral;}publicStringgetNmEmissor(){returnthis.nmEmissor;}publicvoidsetNmEmissor(StringnmEmissor){this.nmEmissor=nmEmissor;}publicStringgetSincronizadoAn(){returnthis.sincronizadoAn;}publicvoidsetSincronizadoAn(StringsincronizadoAn){this.sincronizadoAn=sincronizadoAn;}publicStringgetSituacaoBloqueio(){returnthis.situacaoBloqueio;}publicvoidsetSituacaoBloqueio(StringsituacaoBloqueio){this.situacaoBloqueio=situacaoBloqueio;}publicStringgetNsucne(){returnthis.nsucne;}publicvoidsetNsucne(Stringnsucne){this.nsucne=nsucne;}publicSet<Tbinutilizacao>getTbinutilizacaoCollection(){returnthis.tbinutilizacaoCollection;}publicvoidsetTbinutilizacaoCollection(Set<Tbinutilizacao>tbinutilizacaoCollection){this.tbinutilizacaoCollection=tbinutilizacaoCollection;}publicSet<TbhistBloqueioRecfCte>getTbhistBloqueioRecfCteCollection(){returnthis.tbhistBloqueioRecfCteCollection;}publicvoidsetTbhistBloqueioRecfCteCollection(Set<TbhistBloqueioRecfCte>tbhistBloqueioRecfCteCollection){this.tbhistBloqueioRecfCteCollection=tbhistBloqueioRecfCteCollection;}publicSet<TbHistObrigatoriedadeCte>getTbhistObrigatoriedadeCteCollection(){returnthis.tbhistObrigatoriedadeCteCollection;}publicvoidsetTbhistObrigatoriedadeCteCollection(Set<TbHistObrigatoriedadeCte>tbhistObrigatoriedadeCteCollection){this.tbhistObrigatoriedadeCteCollection=tbhistObrigatoriedadeCteCollection;}publicSet<TbmodalEmissor>getTbmodalEmissors(){returntbmodalEmissors;}publicvoidsetTbmodalEmissors(Set<TbmodalEmissor>tbmodalEmissors){this.tbmodalEmissors=tbmodalEmissors;}}
@Entity@Table(name="TBMODAL_EMISSOR")publicclassTbmodalEmissorimplementsSerializable{privatestaticfinallongserialVersionUID=1L;@EmbeddedIdprivateTbmodalEmissorPKpk;privateStringnsucne;@Column(name="SINCRONIZADO_AN")privateStringsincronizadoAn;//bi-directional many-to-one association to Tbmodal@ManyToOne@JoinColumn(name="CD_MODAL")privateTbmodaltbmodal;//bi-directional many-to-one association to TbpermissaoEmissorCte@ManyToOne@JoinColumns({@JoinColumn(name="IE",referencedColumnName="IE_EMISSOR"),@JoinColumn(name="CNPJ",referencedColumnName="CNPJ_EMISSOR"),})privateTbpermissaoEmissorCtetbpermissaoEmissorCte;publicTbmodalEmissor(){}publicTbmodalEmissorPKgetPk(){returnpk;}publicvoidsetPk(TbmodalEmissorPKpk){this.pk=pk;}publicStringgetNsucne(){returnthis.nsucne;}publicvoidsetNsucne(Stringnsucne){this.nsucne=nsucne;}publicStringgetSincronizadoAn(){returnthis.sincronizadoAn;}publicvoidsetSincronizadoAn(StringsincronizadoAn){this.sincronizadoAn=sincronizadoAn;}publicTbmodalgetTbmodal(){returnthis.tbmodal;}publicvoidsetTbmodal(Tbmodaltbmodal){this.tbmodal=tbmodal;}publicTbpermissaoEmissorCtegetTbpermissaoEmissorCte(){returnthis.tbpermissaoEmissorCte;}publicvoidsetTbpermissaoEmissorCte(TbpermissaoEmissorCtetbpermissaoEmissorCte){this.tbpermissaoEmissorCte=tbpermissaoEmissorCte;}}
@EmbeddablepublicclassTbmodalEmissorPKimplementsSerializable{// ------------------------------------- variaveis instancia ----------------------------------------------// default serial version id, required for serializable classes.privatestaticfinallongserialVersionUID=1L;@Column(name="IE_EMISSOR")privateStringieEmissor;@Column(name="CNPJ_EMISSOR")privateStringcnpjEmissor;@Column(name="CD_MODAL")privatelongcdModal;// ------------------------------------- construtores ----------------------------------------------publicTbmodalEmissorPK(StringieEmissor,StringcnpjEmissor,longcodModal){super();this.ieEmissor=ieEmissor;this.cnpjEmissor=cnpjEmissor;this.cdModal=codModal;}// ------------------------------------- metodos publicos -------------------------------------------publicTbmodalEmissorPK(){}publicStringgetIeEmissor(){returnthis.ieEmissor;}publicvoidsetIeEmissor(StringieEmissor){this.ieEmissor=ieEmissor;}publicStringgetCnpjEmissor(){returnthis.cnpjEmissor;}publicvoidsetCnpjEmissor(StringcnpjEmissor){this.cnpjEmissor=cnpjEmissor;}publiclonggetCdModal(){returnthis.cdModal;}publicvoidsetCdModal(longcdModal){this.cdModal=cdModal;}publicbooleanequals(Objectother){if(this==other){returntrue;}if(!(otherinstanceofTbmodalEmissorPK)){returnfalse;}TbmodalEmissorPKcastOther=(TbmodalEmissorPK)other;returnthis.ieEmissor.equals(castOther.ieEmissor)&&this.cnpjEmissor.equals(castOther.cnpjEmissor)&&(this.cdModal==castOther.cdModal);}publicinthashCode(){finalintprime=31;inthash=17;hash=hash*prime+this.ieEmissor.hashCode();hash=hash*prime+this.cnpjEmissor.hashCode();hash=hash*prime+((int)(this.cdModal^(this.cdModal>>>32)));returnhash;}}
porém, quando subo o jboss, ocorre o seguinte erro :
Como o dcorteztec falou, um dos atributos que contém a anotação da coluna CD_MODAL precisa ser marcado com insertable=false e updatable=false. Isso acontece por que na PK você já definiu esse atributo, e o Hibernate tentaria atualizá-lo em dois pontos. Não seria algo muito consistente.
Isso vai acontecer praticamente sempre que você precisar utilizar uma associação ManyToOne numa PK. Vc acaba usando só o código da FK na classe PK e depois bota a relação ManyToOne não atualizável na classe.