Hibernate一直在寻找不同位置的配置文件

时间:2016-06-14 19:18:19

标签: 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状态500 - 请求处理失败;嵌套异常是   org.hibernate.internal.util.config.ConfigurationException:指定   cfg.xml文件   [C:\ Users \ MYUSERNAME \ Desktop \ src \ main \ resources \ hibernate.cfg.xml]的确如此   不存在

我的问题为什么我一直在我的桌面上查找我的文件路径,如何将其更改为只在我的项目中查找?我检查并制作了确保我的Web部署程序集中存在我的资源路径(下面的屏幕截图):

enter image description here

1 个答案:

答案 0 :(得分:4)

src/main是maven特定的项目结构来安排源文件。但是在构建之后,编译的类和资源文件将被复制到WEB-INF/classes/目录。

假设您正在使用mavenresources文件夹是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();