Hibernate无法定位hibernate.cfg.xml资源的报错原因及解决方法
解决Hibernate找不到
hibernate.cfg.xml及空指针异常问题 先看你给出的报错信息,核心问题有两个,咱们一步步拆解:
报错原因分析
- 找不到
hibernate.cfg.xml:
报错里的Could not locate cfg.xml resource [hibernate.cfg.xml]是根源。Hibernate默认会在类路径(classpath)的根目录下查找这个配置文件,但你说所有文件都放在同一个包下,这就意味着hibernate.cfg.xml被放到了包目录里,而不是classpath根,Hibernate自然找不到它。 - NullPointerException:
因为SessionFactory创建失败,session变量一直是null,最后在finally块里调用session.close()时,就触发了空指针异常。
具体解决方案
1. 修正配置文件的位置(推荐方案)
如果是普通Java项目,把hibernate.cfg.xml移动到项目的src目录根下;如果是Maven/Gradle项目,放到src/main/resources目录下。这样编译后,配置文件会被自动放到classpath的根目录,Hibernate就能正常加载它了。
2. 手动指定配置文件路径(如果不想移动文件)
如果你坚持把配置文件放在当前包下,可以修改UtilHibernate里的代码,明确指定配置文件的资源路径:
sessionFactory = new Configuration().configure("/Hibernate/hibernate.cfg.xml").buildSessionFactory();
这里的/Hibernate/是你的包名(注意大小写),前面的斜杠表示从classpath根目录开始查找。
3. 修复空指针异常
不管配置文件的问题有没有解决,都要给finally块加个非空判断,避免session为null时调用close:
finally { if (session != null && session.isOpen()) { session.close(); } }
额外检查点
- 确认
hibernate.cfg.xml的文件名拼写完全正确,注意大小写(比如Linux/Mac系统对文件名大小写敏感,别写成Hibernate.cfg.xml)。 - 打开
hibernate.cfg.xml检查XML语法是否正确,比如标签有没有闭合,数据库连接URL、用户名密码是否配置正确。
内容的提问来源于stack exchange,提问作者EndymionSpring
相关产品推荐
相关产品推荐

