我需要为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; }
答案 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/
不在类路径中。
如果您真的想要从/WEB-INF/applicationContext.xml
获取配置,则应使用URL
获取applicationContext.xml
ServletContext
File path to resource in our war/WEB-INF folder?
并将URL
传递给Configuration
或StandardServiceRegistryBuilder
,这取决于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()