Hibernateマッピングに問題があります。私は3つのファイルを持っています、それらのそれぞれは休止状態のクラスのマッピングです:
- Proyectos.hbm.xml:Proyectosクラス
- UnidadesEmpresa.hbm.xml:UnidadesEmpresaクラス
- CliUniEmps.hbm.xml; CliUniEmpクラス
私は最後のものに関連する問題を抱えています。そのコードはこれです:
<hibernate-mapping>
<class name="com.dmsti.dominio.CliUniEmp" table="clientes_uniemps" lazy="false" catalog="dms_hrm">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<many-to-one name="cliente" entity-name="com.dmsti.dominio.Cliente"
column="cliente_id" unique="false" not-null="false" />
<many-to-one name="unidadEmpresa" entity-name="com.dmsti.dominio.UnidadEmpresa"
column="uniemp_id" unique="false" not-null="false" />
</class>
</hibernate-mapping>
すべてのファイルはhibernate.cfg.xmlによって適切に関連付けられており、通常はすべて機能します。それでは、私の現在の問題について深く説明しましょう。
私のHibernateファイルProyectos.hbm.xmlには、CliUniEmps.hbm.xml(およびそのテーブルはclientes_uniemps)で、以下に定義されているcliUniEmpというエンティティへの参照があります。
コード1。
<many-to-one name="cliUniEmp" entity-name="com.dmsti.dominio.CliUniEmp"
column="cli_uniemp_id" unique="false" not-null="false" />
UnidadesEmpresa.hbm.xmlには、同じテーブルへの別の参照があります。
コード2。
<set name="clientes" table="clientes_uniemps" catalog="dms_hrm"
inverse="false" lazy="false" fetch="select" cascade="all" >
<key>
<column name="uniemp_id" not-null="true" />
</key>
<many-to-many entity-name="com.dmsti.dominio.Cliente">
<column name="cliente_id" not-null="true" />
</many-to-many>
</set>
どちらか一方だけが存在する場合、両方のコードは正しく機能します。UnidadesEmpresa.hbm.xmlからセット「clientes」(コード2)を削除すると 、多対1のエンティティ「cliUniEmp」(コード1)は問題なく機能します。同様に、コード1を削除すると、コード2は完全に機能します。
アプリケーションで両方が同時に存在する場合、Hibernateは例外を起動します。
org.hibernate.MappingException:外部キー(FKE442A80E4FB5975E:proyectos [cli_uniemp_id]))には、参照される主キー(clientes_uniemps [uniemp_id、cliente_id])と同じ数の列が必要です。
行き詰まりました!助けてくれますか?