获取文件路径 - Hibernate SessionFactory

时间:2016-05-18 15:50:56

标签: java hibernate

我需要为hibernate创建一个会话工厂,但默认情况下它会查找" hibernate.cfg.xml"文件。 我没有创建此文件。所有hibernate配置都在" applicationContext.xml" Spring MVC配置文件。我需要做的就是提供" / WEB-INF / applicationContext" " configure"的文件路径配置类的方法,但我不知道如何在JAVA中找到该文件的相对路径。

        public static SessionFactory createSessionFactory() {
            Configuration configuration = new Configuration();
            configuration.configure(HERE I NEED TO GET "/WEB-INF/applicationContext.xml FILE PATH");
            serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
                    configuration.getProperties()).build();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
            return sessionFactory;  }

2 个答案:

答案 0 :(得分:1)

Hibernate使用/WEB-INF/applicationContext.xml

加载ClassLoader.getResourceAsStream("/WEB-INF/applicationContext.xml")

ClassLoader尝试访问类路径根目录中的文件 - 对于Web应用程序war/WEB-INF/classes/。您应该将applicationContext.xml添加到war/WEB-INF/classes/applicationContext.xml并使用

加载它
sessionFactory = new Configuration().configure("applicationContext.xml")
  .buildSessionFactory();

您无法指定/WEB-INF/applicationContext.xml,因为/WEB-INF/不在类路径中。

How Hibernate loads resources

如果您真的想要从/WEB-INF/applicationContext.xml获取配置,则应使用URL获取applicationContext.xml ServletContext File path to resource in our war/WEB-INF folder?

并将URL传递给ConfigurationStandardServiceRegistryBuilder,这取决于Hibernate版本。

重要通知

我认为,上面是没有意义的,因为applicationContext.xml应该有hibernate.cfg.xml之类的结构,显然,它不会。

答案 1 :(得分:0)

该文件应该在您的类路径中,因此您应该能够使用classpath变量引用它:classpath:/WEB-INF/applicationContext.xml

如果这不起作用,那么你使用类加载器加载文件,然后“询问”完整路径(虽然这不应该......):

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL resource = classLoader.getResource( "WEB-INF/applicationContext.xml" );
String fullPath = resource.getPath()