You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hibernate出现org.hibernate.MappingException: Unknown entity异常求助

报错原因及修复方案

你的org.hibernate.MappingException: Unknown entity: com.mycompany.mavenproject1.entity.Book报错,本质是Hibernate没有将Book类识别为托管实体类,按以下步骤排查修复即可:

  • 优先排查实体类注解导包
    最新版Hibernate 6.x已全面迁移至Jakarta EE规范,需确保@Entity注解的导入包为jakarta.persistence.Entity,如果误导入旧的javax.persistence.Entity,即使加了注解也无法被Hibernate识别。
  • 修复SessionFactory构建逻辑
    你当前使用的Configuration类构建方式,默认不会自动加载hibernate.cfg.xml中配置的<mapping package>包下的注解实体,最快速的修复方式是手动注册实体类,修改getSessionFactory方法:
    private static SessionFactory getSessionFactory() {
        try {
            // 从hibernate.cfg.xml中定义的session-factory配置构建SessionFactory对象
            Configuration configuration = new Configuration().configure();
            // 新增:手动注册Book实体类
            configuration.addAnnotatedClass(Book.class);
            StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
                    .applySettings(configuration.getProperties());
            SessionFactory sessionFactory = configuration.buildSessionFactory(builder.build());
            return sessionFactory;
        } catch (Throwable e) {
            System.err.println("创建SessionFactory对象出错:"
                    + e.getMessage());
            throw new ExceptionInInitializerError(e);
        }
    }
    
  • 启用自动包扫描(无需逐个注册实体)
    如果不想手动逐个添加实体类,可替换为Hibernate新版引导API,自动扫描指定包下的所有实体类,代码示例:
    private static SessionFactory getSessionFactory() {
        try {
            StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
                    .configure()
                    .build();
            Metadata metadata = new MetadataSources(registry)
                    // 扫描指定包下的所有实体注解类
                    .scanPackages("com.mycompany.mavenproject1.entity")
                    .getMetadataBuilder()
                    .build();
            return metadata.buildSessionFactory();
        } catch (Throwable e) {
            System.err.println("创建SessionFactory对象出错:"
                    + e.getMessage());
            throw new ExceptionInInitializerError(e);
        }
    }
    
  • 额外排查点
    确认hibernate.cfg.xml放置在项目classpath根目录下,maven项目默认放在src/main/resources路径下即可,保证配置文件可以被正常加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 10:15:05