Hibernate SessionFactory创建失败:无法定位hbm.xml文件求助
Hibernate SessionFactory配置中hbm.xml文件找不到的问题解决
在带有@Configuration注解的类中通过@Bean声明Hibernate SessionFactory时,mappingResource()方法无法定位hbm.xml文件,报错提示文件不存在,具体错误信息:
java.io.FileNotFoundException : Class Path Resource [CutomerRequestDTO.hbm.xml] cannot be opened because it does not exists.
相关配置代码
@Bean public SessionFactory hibernateSessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setLobHandler(lobHandler()); List<String> mappingResources = new ArrayList<>(); mappingResources.add("hibernate/Customer RequestDTO.hbm.xml"); mappingResources.add("hibernate/AccessRequestDTO.hbm.xml"); mappingResources.add("hibernate/AccessRequestItemDTO.hbm.xml"); sessionFactory.setMappingResources(mappingResources.toArray(new String[mappingResources.size()])); sessionFactory.setHibernateProperties(hibernateProperties()); try { sessionFactory.afterPropertiesSet(); } catch (java.lang.Exception e) { LOG.error("Error creating Session Factory", e); } return (SessionFactory) sessionFactory.getObject(); }
排查与解决步骤
- 修正文件名拼写错误:报错信息里的
CutomerRequestDTO.hbm.xml存在拼写错误(缺少字母s,正确应为Customer),先核对代码中填写的文件名与实际文件的拼写、大小写、空格是否完全一致。 - 确认文件存放路径:
- 确保hbm.xml文件放在Maven/Gradle项目默认的类路径资源目录
src/main/resources/hibernate/下,这样hibernate/xxx.hbm.xml的路径才能被正确识别。 - 如果文件放在非标准目录,需要在项目构建配置(如Maven的
pom.xml、Gradle的build.gradle)中把该目录配置为类路径资源目录。
- 确保hbm.xml文件放在Maven/Gradle项目默认的类路径资源目录
- 移除文件名中的空格:代码里的
Customer RequestDTO.hbm.xml包含空格,建议重命名为CustomerRequestDTO.hbm.xml避免路径解析异常,同时同步修改代码中的路径配置。 - 验证资源可访问性:可以在配置类中添加以下代码测试资源是否能被加载,确认路径是否正确:
InputStream is = getClass().getClassLoader().getResourceAsStream("hibernate/CustomerRequestDTO.hbm.xml"); if (is == null) { LOG.error("目标hbm.xml资源未找到"); } else { LOG.info("目标hbm.xml资源加载成功"); is.close(); }
内容的提问来源于stack exchange,提问作者Arun Kumar Mudraboyina
相关产品推荐
相关产品推荐

