我使用 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 Status 500 - Request processing failed; nested exception is org.hibernate.internal.util.config.ConfigurationException: Specified cfg.xml file [C:\Users\MYUSERNAME\Desktop\src\main\resources\hibernate.cfg.xml] does not exist
我的问题:为什么它不断在我的桌面中查找我的文件路径,以及如何将其更改为仅在我的项目中查找?我检查并制作了确保我的资源路径存在于我的 Web 部署程序集中(下面的屏幕截图):
最佳答案
src/main
是 maven 特定的项目结构,用于排列源文件。但构建后,编译后的类和资源文件将复制到 WEB-INF/classes/目录。
假设您使用的是 maven
并且您的 resources
文件夹是 source
结构的一部分,那么 XML 文件将被复制到 WEB-INF/classes/resources
文件夹。
将路径更改为String hibernatePropsFilePath = "/resources/hibernate.cfg.xml";
更新:
再次查看您的 Web 部署程序集
设置图像后,您的 main/resources
文件夹映射到 classes
目录,而不是 类/资源
。因此,请按如下所示更改代码,而不使用 File
。
Configuration configuration = new Configuration("hibernate.cfg.xml");
configuration.addAnnotatedClass(ClientCrossRef.class);`
configuration.configure();
更好的是,由于您的 cfg.xml 文件已经是类路径的一部分,您甚至不需要指定它。 Hibernate 将在类路径中查找它。
顺便说一句,您可以轻松构建 session 工厂,如下所示
SessionFactory sessionFactory = new Configuration().configure(
"hibernate.cfg.xml")
.buildSessionFactory();
关于java - Hibernate 不断在不同位置寻找配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37820398/