簡體   English   中英

org.hibernate.MappingException:實體映射中的重復列

[英]org.hibernate.MappingException: Repeated column in mapping for entity

我正在使用Hibernate 3.2.5。 我在使用多對一映射時遇到上述異常。 訓練表與Department表具有多對一關系,即One Depatement能夠進行多次訓練。

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

這種情況的錯誤信息非常清楚(你沒有把它放在這里,但我已經看過幾次了)。 問題是您已將列DEPT_ID映射到類中的兩個不同字段。

首先,您已將其映射到屬性deptId ,然后映射到departmentDetails 正如您所知,只有在其中一個映射配置為insert="false" update="false"時,hibernate才允許執行此操作。

原因很簡單。 如果你將deptId更改為另一個id,hibernate將需要更改在departmentDetails映射的類,這非常復雜。

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

如果在映射文件中使用相同的列名兩次。 可能是你得到映射異常

Initial SessionFactory creation failed.org.hibernate.MappingException:

如果你標記insert = flase和update = false。

如果您嘗試更新或插入表或其他遺留系統中的記錄,請嘗試更新這些列值。 它不會更新或插入該文件。

請查看以下鏈接。這將有助於找到您的解決方案。

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

謝謝Sandeep G.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM