与外键相关的Hibernate映射异常

与外键相关的Hibernate映射异常,hibernate,exception,mapping,foreign-key-relationship,Hibernate,Exception,Mapping,Foreign Key Relationship,我的Hibernate映射有问题。我有三个文件,每个文件都是hibernate类的映射: Proyectos.hbm.xml:Proyectos类 UnidadesEmpresa.hbm.xml:UnidadesEmpresa类 CliUniEmps.hbm.xml;CliUniEmp类 我有一个问题与最后一个有关。其代码如下: <hibernate-mapping> <class name="com.dmsti.dominio.CliUniEmp" table="

我的Hibernate映射有问题。我有三个文件,每个文件都是hibernate类的映射:

  • 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\u 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\u id,客户id])


我被卡住了!请帮我一下好吗?

您在
clients\u uniemps
上遇到了表命名冲突

这样考虑对象模型:三个实体
CliUniEmp
Proyecto
,和
UnidadesEmpresa
。这三个人都应该有自己的桌子。然后它们之间有关系:
CliUniEmp
NN
unidadedmpresa
CliUniEmp
1N
Proyecto

这两种关系都需要一种将一个实体的ID映射到另一个实体的ID的方法。对于1N关系,
Proyecto
表可以直接包含
CliUniEmp
的ID,这很好

对于NN,您不能这样做。必须有一个包含ID对的中间表。
UnidadesEmpresa.hbm.xml
中的
set
元素中的
table
属性定义了该表的名称。你可以在网站上看到,他们说:

您还必须描述关联表和联接 使用@JoinTable注释的条件

您案例中的具体问题是,您对
CliUniEmp
实体和关系表使用了相同的表名。它们必须是不同的。更改关联表或实体表的名称即可