我使用Eclipse IDE构建了我的项目,并将hibernate.cfg.xml
文件放在resources
文件夹中(下面的屏幕截图):
当我尝试在DAO类中引用hibernate.cfg.xml
时,会出现问题。这是我的代码片段,我得到了SessionFactory
:
DAO getSessionFactory()示例
private static SessionFactory getSessionFactory() {
String hibernatePropsFilePath = "src/main/resources/hibernate.cfg.xml";
File hibernatePropsFile = new File(hibernatePropsFilePath);
Configuration configuration = new Configuration();
configuration.configure(hibernatePropsFile);
configuration.addAnnotatedClass(MyClass.class);
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties());
ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();
return configuration.buildSessionFactory(serviceRegistry);
}
正如你所看到的,我仍然指着"正确的"在我的项目中的位置,但是当我使用Postman测试时,我收到以下错误:
HTTP状态500 - 请求处理失败;嵌套异常是 org.hibernate.internal.util.config.ConfigurationException:指定 cfg.xml文件 [C:\ Users \ MYUSERNAME \ Desktop \ src \ main \ resources \ hibernate.cfg.xml]的确如此 不存在
我的问题:为什么我一直在我的桌面上查找我的文件路径,如何将其更改为只在我的项目中查找?我检查并制作了确保我的Web部署程序集中存在我的资源路径(下面的屏幕截图):
答案 0 :(得分:4)
src/main
是maven特定的项目结构来安排源文件。但是在构建之后,编译的类和资源文件将被复制到WEB-INF/classes/
目录。
假设您正在使用maven
且resources
文件夹是source
结构的一部分,则XML文件将被复制到WEB-INF/classes/resources
文件夹。
将路径更改为String hibernatePropsFilePath = "/resources/hibernate.cfg.xml";
<强>更新强>
再次查看Web Deployment Assembly
设置图片后,您的main/resources
文件夹将映射到classes
目录而不是classes/resources
。所以如下所示更改代码而不使用File
。
Configuration configuration = new Configuration("hibernate.cfg.xml");
configuration.addAnnotatedClass(ClientCrossRef.class);`
configuration.configure();
甚至更好的是,因为你的cfg.xml
文件已经是classpath的一部分,所以你甚至不需要指定它。 Hibernate将在类路径中查找它。
顺便说一句,您可以轻松地构建会话工厂
SessionFactory sessionFactory = new Configuration().configure(
"hibernate.cfg.xml")
.buildSessionFactory();