You need to enable JavaScript to run this app. 使用Hibernate插入数据库对象时报org.hibernate.MappingException错误求助
优惠活动
大模型
产品
解决方案
定价
更多

使用Hibernate插入数据库对象时报org.hibernate.MappingException错误求助

Hibernate MappingException 问题修复

报错根因

程序抛出org.hibernate.MappingException的核心原因是:Person类没有添加必要的实体映射注解,Hibernate无法识别其作为数据库映射对象的规则。
你当前的Person类只是普通POJO,哪怕在配置文件里声明了类路径、在代码中调用了addAnnotatedClass,Hibernate也不知道如何将类字段和数据库表列对应,自然会抛出映射异常。

分步修复方案

1. 补全Person类的核心映射注解

需要给类和主键字段添加JPA标准注解,Hibernate才能正确识别映射规则,修复后的代码如下:

package com.mihir.hibDemo;

// 导包说明:Hibernate 5.x版本用javax.persistence下的注解,Hibernate 6.x及以上用jakarta.persistence下的注解,请勿导错包
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity // 标记当前类为需要映射到数据库表的实体类
public class Person {
    @Id // 标记id字段为对应数据库表的主键
    private int id;
    private String name;

    // 原有getter、setter方法保持不变
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

注意:如果导错了非JPA标准的包路径下的注解,Hibernate依然会识别失败,重复抛出MappingException。

2. 调整配置文件的版本兼容项

你当前的hibernate.cfg.xml存在几个常见的版本兼容隐患,调整参考如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- MySQL 8.x版本的驱动类名需要替换为cj包路径,仅MySQL 5.x版本可使用原com.mysql.jdbc.Driver -->
        <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="hibernate.connection.password">0924</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/college</property>
        <property name="hibernate.connection.username">root</property>
        <!-- MySQL 8.x需要适配对应版本方言,旧版MySQL可沿用原MySQLDialect -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
        <property name="hibernate.hbm2ddl.auto">create</property>
        <!-- 实体加载配置二选一即可,无需重复配置 -->
        <mapping class="com.mihir.hibDemo.Person"/>
    </session-factory>
</hibernate-configuration>

补充提示:当前配置中hibernate.hbm2ddl.auto设置为create,每次程序运行都会删除原有Person表并重建,正式测试时可以改为update,避免已有数据被清空。

3. 冗余配置说明

你在App.java中写的addAnnotatedClass(Person.class)和xml中的<mapping>标签作用完全一致,只要保留其中一种实体加载方式即可,重复配置不会报错,但属于无意义冗余。

错误截图参考

错误截图


内容的提问来源于stack exchange,提问作者Mihir Sheth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 13:15:03