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的属性。因为查询时并不会单独直接映射外键列,而是利用外键列查询绑定的关系属性的值。
此文希望可以帮助到大家。如有错误,请指教。
如果大家还有其他的情况或者好的解决方法,也望指教,感谢阅读。