java - Hibernate 不断在不同位置寻找配置文件

标签 java eclipse spring hibernate

我使用 Eclipse IDE 构建了我的项目,并将我的 hibernate.cfg.xml 文件放在 resources 文件夹中(下面的屏幕截图):

enter image description here

<小时/>

当我尝试在 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 部署程序集中(下面的屏幕截图):

enter image description here

最佳答案

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/

相关文章:

java - DBUnit 测试比较失败

java - 从 Java 到 JavaScript 我需要知道什么?

java - 使用 AvroCoder 使用提供的模式序列化泛型类

java - 在字符串中查找字符串

java - 使用 Java 连接到 Oracle DSN 时出错

java - 从一个 fragment 中调用另一个 fragment 中的方法

java - Eclipse 和 SVN 中的 Maven Multimodul 项目

java - 如何使用 Spring 正确关闭执行程序服务?

java - 为什么不在 StringUtils、Spring-Core 中使用 len 而不是 str.length() ?

面向非 IDE Java 开发人员的 C# SDK