天天看点

Hibernate异常之Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: cn...

1、异常描述

Caused by: org.hibernate.MappingException:

 Repeated column in mapping for entity: cn.wang.entity.Student column: 

 cid (should be mapped with insert="false" update="false")

备注:

      此处hibernate版本号:3.6.10.Final

2、示例代码

2-1 实体类

// 班级实体类
public class Clazz implements Serializable{
	private Integer id;
	private String name;
    // 省略部分代码....
}

// 学生实体类
public class Student  implements Serializable{
	private Integer id;
	private String name;
	private Date birthday;
    private Integer cid;// 外键列

	// 创建关系属性
	private Clazz clazz;
	// 关系属性set/get
	public Clazz getClazz() {
		return clazz;
	}
	public void setClazz(Clazz clazz) {
		this.clazz = clazz;
	}
       // 省略部分代码....
	
}
           

2-2 Student.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
   
    <class name="cn.bdqn.wang.Student" table="hibernate_student" lazy="false">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="sequence">
           		<param name="sequence">hibernate_studen_seq</param>
     		</generator>
        </id>
        <property name="name" type="java.lang.String" column="name"/>
        <property name="birthday" type="java.util.Date" column="birthday"/>
        <property name="cid" type="java.lang.Integer" column="cid"></property>
        <!-- 映射关系属性-->
       <many-to-one name="clazz" column="cid" class="cn.wang.entity.Clazz"></many-to-one>  
    </class>
    
</hibernate-mapping>
           

错误原因:

在Student.hbm.xml中,<many-to-one>已经将外键列与关系属性绑定映射,所以不能使用<property>标签再次映射外键列。

3、解决方法

在Student.hbm.xml中,去掉<property name="cid" type="java.lang.Integer" column="cid"></property>这行映射即可。

注意:

        由于Student.hbm.xml 中已经无法单独映射外键列,所以实体类中也无需保留外键列cid的属性。因为查询时并不会单独直接映射外键列,而是利用外键列查询绑定的关系属性的值。

此文希望可以帮助到大家。如有错误,请指教。                                                           

如果大家还有其他的情况或者好的解决方法,也望指教,感谢阅读。 

继续阅读