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

博客详细介绍了在使用Hibernate时遇到的MappingException异常,问题在于实体类Student的hbm.xml文件中,外键cid被重复映射。解决方案是删除<property>标签中关于cid的映射,避免在实体类中重复映射外键列。通过这种方法可以解决Hibernate映射冲突的问题。

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


                
`Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet` 这个错误通常出现在 Hibernate 框架中,表示在尝试从数据库提取结果集 (`ResultSet`) 的过程中发生了 SQL 语法错误。以下是可能导致该问题的原因及其解决方法: --- ### **常见原因及解决办法** #### **1. 数据库表或字段名称拼写错误** 如果在 Hibernate 配置文件(如 `.hbm.xml` 文件)或实体类注解中定义的表名或字段名与实际数据库中的表结构不符,就会引发此问题。 **解决方案**: - 确保实体类中标记的 `@Table(name="...")` 和 `@Column(name="...")` 中的名称完全匹配数据库的实际表和字段名称。 - 注意区分大小写规则:某些数据库(如 MySQL 默认不区分大小写),而其他数据库(如 PostgreSQL 或 Oracle 则严格区分)。 示例: ```java @Entity @Table(name = "users") public class User { @Id @Column(name = "user_id") private Long id; @Column(name = "username", nullable = false) private String username; } ``` --- #### **2. HQL/JPQL 查询语法错误** Hibernate 使用的是类似于 SQL 的查询语言(HQL 或 JPQL),但如果编写有误,也可能导致无法解析为有效的 SQL 并抛出类似异常。 **解决方案**: - 认真检查你的 HQL 或 JPQL 是否存在语法错误。 - 尝试将 HQL 转换为原生 SQL 来验证其正确性。 示例: ```java Query<User> query = session.createQuery( "FROM User u WHERE u.username = :name", User.class); query.setParameter("name", "testUser"); List<User> users = query.list(); ``` 确保这里的 `"FROM User"` 对应于正确的实体类别名。 --- #### **3. 数据库驱动版本不兼容** 当使用的 JDBC 驱动程序版本较旧或者与当前数据库系统版本不适配时,也可能会出现这种错误。 **解决方案**: - 升级至最新版的支持相应数据库类型的 JDBC 驱动包; - 在项目依赖管理工具 (Maven / Gradle) 中明确指定所需的 driver 版本号。 对于 Maven 用户来说,在 pom.xml 添加适当的 dependency 声明即可完成引入新 Driver 包的任务: ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.XX</version><!-- 替换成合适的具体数字 --> </dependency> ``` --- #### **4.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值