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

IntelliJ开发Hibernate(JPA)报找不到hibernate.cfg.xml错误

报错核心原因

当前代码混用了Hibernate两套独立的配置加载机制,直接触发了资源找不到的异常:

  • 你在Main.java中使用了原生Hibernate的加载API:new Configuration().configure(),这个方法默认会从类路径下查找hibernate.cfg.xml配置文件
  • 但你项目里实际准备的是JPA规范要求的persistence.xml,项目中根本不存在hibernate.cfg.xml文件,因此直接抛出Could not locate cfg.xml resource的报错
两种可落地的修复方案

方案1:保留现有persistence.xml配置,修改代码加载逻辑

不需要新建任何配置文件,直接调整代码即可:

  1. 首先确认persistence.xml的存放路径符合Maven项目规范:必须放在src/main/resources/META-INF/persistence.xml,不能直接放在resources根目录
  2. 将原来错误的配置构建代码:
    Configuration configuration = new Configuration().configure().addAnnotatedClass(Student.class);
    SessionFactory sessionFactory = configuration.buildSessionFactory();
    
    替换为JPA标准的引导方式:
    // 需导入javax.persistence.Persistence包
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("default");
    // 从JPA的EntityManagerFactory中获取Hibernate原生的SessionFactory
    SessionFactory sessionFactory = emf.unwrap(SessionFactory.class);
    
    这种方式下,persistence.xml中已经提前注册了两个实体类,不需要再手动调用addAnnotatedClass重复注册。
  3. 修正现有persistence.xml的参数错误:你写的用户名配置项hibernate.connection.user是错误键名,正确的是hibernate.connection.username,不修改的话后续连接数据库会出现权限校验失败的问题。

方案2:保留现有Configuration加载逻辑,补充对应的hibernate.cfg.xml

如果你更习惯用原生Hibernate的加载方式,就不需要依赖persistence.xml了,直接做两个调整:

  1. 在src/main/resources目录下新建hibernate.cfg.xml,把原来写在persistence.xml里的数据库连接、实体注册配置全部迁移进去,示例内容如下:
    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <!-- 数据库连接配置 -->
            <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/hibernate_test</property>
            <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
            <property name="hibernate.connection.username">postgres</property>
            <property name="hibernate.connection.password">你的数据库实际密码</property>
            <!-- 运行期调试配置 -->
            <property name="hibernate.show_sql">true</property>
            <!-- 新手调试可选:根据实体类结构自动创建/更新数据库表,省去手动建表的步骤 -->
            <property name="hibernate.hbm2ddl.auto">update</property>
            <!-- 注册关联的实体类 -->
            <mapping class="entity.Faculty"/>
            <mapping class="entity.Student"/>
        </session-factory>
    </hibernate-configuration>
    
  2. 修正原来Main.java里的实体注册遗漏:你原来只通过addAnnotatedClass加了Student.class,没加关联的Faculty.class,即使找到了cfg.xml,后面保存带Faculty关联的Student时还是会抛实体找不到的错。如果已经在cfg.xml里配置了实体映射,这行addAnnotatedClass就可以直接删掉。
新手容易踩的额外坑
  • 不要同时保留两套配置(既放hibernate.cfg.xml又放persistence.xml)还混用不同的加载API,很容易出现配置冲突、重复加载实体的问题
  • 所有资源类文件(xml配置)都要放在resources目录下,不要直接放在java源码包下,不然编译的时候不会被打包到类路径,还是会报资源找不到
  • 本地PostgreSQL需要提前建好名为hibernate_test的数据库,不然连接环节会直接报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 17:36:10