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
相关产品推荐
相关产品推荐

