我正在使用 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_ID 列,此处:
<property name="deptId">
<column name="DEPT_ID"></column>
</property>
在这里:
<many-to-one name="departmentDetails" column="DEPT_ID"></many-to-one>
当执行 select 语句时,Hibernate 可以很好地从同一列填充对象的两个属性,但是当执行插入或更新时,它无法决定将哪个属性保留在数据库中。
为什么首先需要将两个属性映射到同一列?如果您需要访问 deptId,您可以删除 deptId 属性并改为执行
training.getDepartmentDetails().getId()
关于java - 组织.hibernate.MappingException : Repeated column in mapping for entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13322935/