Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java org.hibernate.MappingException:实体映射中的重复列_Java_Hibernate - Fatal编程技术网

Java org.hibernate.MappingException:实体映射中的重复列

Java org.hibernate.MappingException:实体映射中的重复列,java,hibernate,Java,Hibernate,我正在使用Hibernate 3.2.5。我在使用多对一映射时遇到上述异常。培训表与部门表存在多对一关系,即一个部门可以接受多个培训 例外情况是要求我在hbm文件中添加insert=“false”update=“false”。如果我在hbm文件中添加此位,那么代码工作正常 以下是hbm文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibern

我正在使用Hibernate 3.2.5。我在使用多对一映射时遇到上述异常。培训表与部门表存在多对一关系,即一个部门可以接受多个培训

例外情况是要求我在hbm文件中添加
insert=“false”update=“false”
。如果我在hbm文件中添加此位,那么代码工作正常

以下是hbm文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

  <class name="com.infy.model.Training" table="training">
  <id name="Id" type="integer" column="ID">
      <generator class="assigned"></generator>
  </id>      
  <property name="trainerName">
      <column name="TRAINER_NAME"></column>
  </property>
  <property name="deptId">
      <column name="DEPT_ID"></column>
  </property>
  <property name="trainingSubject">
      <column name="TRAINING_SUBJECT"></column>
  </property>
  <many-to-one name="departmentDetails" column="DEPT_ID"></many-to-one>
  </class>
</hibernate-mapping>

如果我将此行更改为:

<many-to-one name="departmentDetails" column="DEPT_ID" insert="false" update="false"></many-to-one>

然后代码就工作了。我想知道增加这个的确切原因是什么


关于这一点,

此场景的错误消息非常清楚(您没有把它放在这里,但我已经看过好几次了)。问题是您已经将列
DEPT\u ID
映射到类中的两个不同字段

首先,您已将其映射到属性
deptId
,然后映射到
departmentDetails
。正如您所发现的,只有当其中一个映射配置为
insert=“false”update=“false”
时,hibernate才允许这样做

原因很简单。如果要将
deptId
更改为另一个id,hibernate将需要更改在
departmentDetails
中映射的类,这相当复杂


如果需要获取deptId,可以在
Training
上添加一个getDeptId方法,该方法返回
departmentDetails.getId()
。并且不要提供
setDeptId

您已经映射了DEPT\u ID列两次,如下所示:

  <property name="deptId">
      <column name="DEPT_ID"></column>
  </property>

如果在映射文件中使用同一列名两次。可能是您遇到了映射异常

Initial SessionFactory creation failed.org.hibernate.MappingException:
同样,如果u标记insert=flase,update=false

若您尝试更新或插入表或其他旧系统中的记录,请尝试更新这些列值。它不会更新或插入该文件

请查看下面的链接。它将帮助您找到解决方案

谢谢 桑德普G

training.getDepartmentDetails().getId()
Initial SessionFactory creation failed.org.hibernate.MappingException: