java - 组织.hibernate.MappingException : Repeated column in mapping for entity

标签 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/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/

相关文章:

java - Java 日期验证的正则表达式

java - 让 JPA 生成具有指定行格式的表

database - 在数据库中使用 `@SequenceGenerator` 与自动增量相比有什么优势?

java - 在 Hibernate Search 中反向搜索

java - 如何通过 Java 代码从 XML 文件一次解析一个节点?

java - 加载和分析海量数据

java - 关于用Java实现自己的HashMap的问题

java - 无法覆盖来自第三方库的 Maven 依赖项 -NiFi

java - EntityManager.getResultList() 性能缓慢

java - Hibernate 映射文件中的 DOCTYPE 标记有何用途?