Opa pessoal…
Estou tentando fazer um mapeamento many to many entre duas tabelas que são ligadas por uma terceira tabela de ligação.
Eu estou gerando os hbm.xml utilizando o Hibernate Tools para o eclipse, mais ele está gerando o mapeamento errado. Fazendo algumas alterações nos mapeamentos gerados pelo Tools, eu cheguei aos seguintes:
<hibernate-mapping>
<class name="br.com.dsystems.ds001.models.FaturaDuplicata" table="fatura_duplicata" schema="public">
<composite-id name="id" class="br.com.dsystems.ds001.models.FaturaDuplicataId">
<key-property name="codOrgao" type="string">
<column name="cod_orgao" length="12" />
</key-property>
<key-property name="numAnoFatura" type="short">
<column name="num_ano_fatura" precision="4" scale="0" />
</key-property>
<key-property name="numFatura" type="int">
<column name="num_fatura" precision="7" scale="0" />
</key-property>
<key-property name="numDuplic" type="java.lang.Integer">
<column name="num_duplic" precision="7" scale="0" />
</key-property>
</composite-id>
<many-to-one name="fatura" class="br.com.dsystems.ds001.models.Fatura" update="false" insert="false" fetch="select">
<column name="cod_orgao" length="12" not-null="true" />
<column name="num_ano_fatura" precision="4" scale="0" not-null="true" />
<column name="num_fatura" precision="7" scale="0" not-null="true" />
</many-to-one>
<property name="datVenctoDuplic" type="timestamp">
<column name="dat_vencto_duplic" length="8" />
</property>
<property name="valDuplic" type="big_decimal">
<column name="val_duplic" precision="15" />
</property>
<property name="datHoraEmissa" type="timestamp">
<column name="dat_hora_emissa" length="8" />
</property>
<set name="tituloRecs" inverse="true" table="rel_fatura_dup_titulo_rec">
<key>
<column name="cod_orgao" length="12" not-null="true" />
<column name="num_ano_fatura" precision="4" scale="0" not-null="true" />
<column name="num_fatura" precision="7" scale="0" not-null="true" />
<column name="num_duplic" precision="7" scale="0" not-null="true" />
</key>
<many-to-many entity-name="br.com.dsystems.ds001.models.TituloRec">
<column name="cod_orgao" length="12" not-null="true" />
<column name="num_ano_recebe" precision="4" scale="0" not-null="true" />
<column name="num_titulo_recebe" precision="7" scale="0" not-null="true" />
</many-to-many>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="br.com.dsystems.ds001.models.TituloRec" table="titulo_rec" schema="public">
<composite-id name="id" class="br.com.dsystems.ds001.models.TituloRecId">
<key-property name="codOrgao" type="string">
<column name="cod_orgao" length="12" />
</key-property>
<key-property name="numAnoRecebe" type="java.lang.Short">
<column name="num_ano_recebe" precision="4" scale="0" />
</key-property>
<key-property name="numTituloRecebe" type="java.lang.Integer">
<column name="num_titulo_recebe" precision="7" scale="0" />
</key-property>
</composite-id>
<many-to-one name="tipoTitulo" class="br.com.dsystems.ds001.models.TipoTitulo" fetch="select">
<column name="cod_tipo_titulo" precision="7" scale="0" not-null="true" />
</many-to-one>
<property name="codClient" type="java.lang.Integer">
<column name="cod_client" precision="7" scale="0" />
</property>
<property name="desNumeroOrigin" type="string">
<column name="des_numero_origin" length="15" />
</property>
<property name="datEmissa" type="timestamp">
<column name="dat_emissa" length="8" not-null="true" />
</property>
<property name="datVencim" type="timestamp">
<column name="dat_vencim" length="8" not-null="true" />
</property>
<property name="valTitulo" type="big_decimal">
<column name="val_titulo" precision="15" not-null="true" />
</property>
<property name="valIrrf" type="big_decimal">
<column name="val_irrf" precision="15" />
</property>
<property name="numCodigoIrrf" type="java.lang.Integer">
<column name="num_codigo_irrf" precision="7" scale="0" />
</property>
<property name="valLiquidRecebe" type="big_decimal">
<column name="val_liquid_recebe" precision="15" not-null="true" />
</property>
<property name="datInclusTitulo" type="timestamp">
<column name="dat_inclus_titulo" length="8" not-null="true" />
</property>
<property name="codUsuariInclus" type="string">
<column name="cod_usuari_inclus" length="10" not-null="true" />
</property>
<property name="ideInclusAutoma" type="string">
<column name="ide_inclus_automa" length="1" not-null="true" />
</property>
<property name="datBaixa" type="timestamp">
<column name="dat_baixa" length="8" />
</property>
<property name="desMotivoBaixa" type="string">
<column name="des_motivo_baixa" length="30" />
</property>
<property name="ideTituloAberto" type="string">
<column name="ide_titulo_aberto" length="1" not-null="true" />
</property>
<property name="desObserv" type="string">
<column name="des_observ" length="60" />
</property>
<property name="sigMoedaEstran" type="string">
<column name="sig_moeda_estran" length="6" />
</property>
<property name="valRefereMoedaEstran" type="big_decimal">
<column name="val_refere_moeda_estran" precision="15" />
</property>
<set name="faturaDuplicatas" inverse="true" table="rel_fatura_dup_titulo_rec">
<key>
<column name="cod_orgao" length="12" not-null="true" />
<column name="num_ano_recebe" precision="4" scale="0" not-null="true" />
<column name="num_titulo_recebe" precision="7" scale="0" not-null="true" />
</key>
<many-to-many entity-name="br.com.dsystems.ds001.models.FaturaDuplicata">
<column name="cod_orgao" length="12" not-null="true" />
<column name="num_ano_fatura" precision="4" scale="0" not-null="true" />
<column name="num_fatura" precision="7" scale="0" not-null="true" />
<column name="num_duplic" precision="7" scale="0" not-null="true" />
</many-to-many>
</set>
<set name="tituloRecParcelas" inverse="true">
<key>
<column name="cod_orgao" length="12" not-null="true" />
<column name="num_ano_recebe" precision="4" scale="0" not-null="true" />
<column name="num_titulo_recebe" precision="7" scale="0" not-null="true" />
</key>
<one-to-many class="br.com.dsystems.ds001.models.TituloRecParcela" />
</set>
</class>
</hibernate-mapping>
Com estes mapeamentos, quando eu tento realizar o deploy da minha app, é lançado o seguinte erro…
org.hibernate.MappingException: Repeated column in mapping for collection: br.com.dsystems.ds001.models.TituloRec.faturaDuplicatas column: cod_orgao
Isto se dá pois estou referenciando a coluna ‘cod_orgao’ na KEY e no MANY-TO-MANY de SET (faturaDuplicatas)…
Alguem ja passou por isso ?
ja procurei muito atraz da resposta, mais não consegui achar nada… Só encontrei muita gente com o mesmo problema q eu…
Obrigado
Aguardo respostas.
Rodrigo Kerkhoff