2012-11-10 221 views
6

我正在使用Hibernate 3.2.5。我在使用多對一映射時遇到了上述異常。培訓表與部門表具有多對一的關係,即一個部門可以進行多項培訓。org.hibernate.MappingException:實體映射中的重複列

例外是要求我在我的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> 

然後代碼工作。我想知道添加這個的確切原因是什麼。

問候,

回答

7

您已映射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() 
5

此場景的錯誤信息是很清楚(你還沒有把它放在這裏,但我已經看到了幾次)。問題在於,您已將列DEPT_ID映射到班級中的兩個不同字段。

首先,您已將其映射到屬性deptId,然後映射到departmentDetails。正如您發現的那樣,只有其中一個映射配置爲insert="false" update="false"時,休眠才允許執行此操作。

原因很簡單。如果您想將deptId更改爲另一個ID,則hibernate需要更改映射到departmentDetails的類,這非常複雜。

如果您需要獲取deptId,則可以在Training上添加一個getDeptId方法,該方法返回departmentDetails.getId()。並且不要提供setDeptId

1

。可能是你得到映射例外

Initial SessionFactory creation failed.org.hibernate.MappingException: 

此外,如果你標記插入= flase和更新= false。

如果您嘗試更新或插入表或其他舊版系統中的記錄,請嘗試更新這些列值。它不會更新或插入該字段。

請檢查下面的鏈接。它將幫助您找到您的解決方案。

http://www.techienjoy.com/hibernate-insert-update-control.php

感謝 桑迪普G.

相關問題