我的休眠映射有问题。我有三个文件,每个文件都是一个休眠类的映射:
- 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中,我引用了一个名为cliUniEmp的实体,该实体在 CliUniEmps.hbm.xml 中定义如下(其表为 clientes_uniemps)。
代码 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), 那么多对一实体“cliUniEmp”(代码 1)可以正常工作。同样,如果我删除代码 1,那么代码 2 可以完美运行。
如果两者同时在我的应用程序中,Hibernate 会启动一个异常:
org.hibernate.MappingException: 外键 (FKE442A80E4FB5975E:proyectos [cli_uniemp_id])) 必须具有与引用的主键相同的列数 (clientes_uniemps [uniemp_id,cliente_id])
我被卡住了!拜托,你能帮帮我吗?