与外键相关的Hibernate映射异常
我的Hibernate映射有问题。我有三个文件,每个文件都是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="
- 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
NNunidadedmpresa
,CliUniEmp
1NProyecto
这两种关系都需要一种将一个实体的ID映射到另一个实体的ID的方法。对于1N关系,Proyecto
表可以直接包含CliUniEmp
的ID,这很好
对于NN,您不能这样做。必须有一个包含ID对的中间表。UnidadesEmpresa.hbm.xml
中的set
元素中的table
属性定义了该表的名称。你可以在网站上看到,他们说:
您还必须描述关联表和联接
使用@JoinTable注释的条件
您案例中的具体问题是,您对CliUniEmp
实体和关系表使用了相同的表名。它们必须是不同的。更改关联表或实体表的名称即可