2014-06-05 148 views
0

我正在学习在我的Java Web应用程序中使用Hibernate。我有以下SessionFactory的开始为我的hibernate.cfg.xml文件的位置的配置,但它仍然抱怨:resources/hibernate.cfg.xml not foundresources/hibernate.cfg.xml not found

“资源”文件夹是我的“SRC”文件夹中的Java项目的子目录。

public class HibernateUtil 
{ 
    private static final SessionFactory sessionFactory = new Configuration().configure("resources/hibernate.cfg.xml").buildSessionFactory(); 

    public static void main(String[] args) 
    { 
     Session session = sessionFactory.getCurrentSession(); 
     Transaction tx = session.beginTransaction(); 

     Book book1 = new Book("John Wright", "Unknown Title"); 
     session.save(book1); 
     tx.commit(); 

     System.out.println("Book committed: book title: " + book1.getTitle() + ", author is: " + book1.getAuthor()); 
     sessionFactory.close(); 
    } 


} 

我使用的休眠依赖于我的pom.xml如下,但的IntelliJ警告说,buildSessionFactory()方法被弃用亮点一 “删除线”

<dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.3.5.Final</version> 
     </dependency> 

我在最底层也发布了来自我的错误消息。出了什么问题?感谢

10:43:12.737 [main] INFO o.h.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {4.0.4.Final} 
10:43:12.746 [main] INFO org.hibernate.Version - HHH000412: Hibernate Core {4.3.1.Final} 
10:43:12.747 [main] INFO org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found 
10:43:12.749 [main] INFO org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist 
Exception in thread "main" java.lang.ExceptionInInitializerError 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:259) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:116) 
Caused by: org.hibernate.HibernateException: resources/hibernate.cfg.xml not found 
    at org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:173) 
    at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:2093) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2074) 
    at persistence.HibernateUtil.<clinit>(HibernateUtil.java:14) 
    ... 3 more 
10:43:12.763 [main] INFO org.hibernate.cfg.Configuration - HHH000043: Configuring from resource: resources/hibernate.cfg.xml 
10:43:12.763 [main] INFO org.hibernate.cfg.Configuration - HHH000040: Configuration resource: resources/hibernate.cfg.xml 

Process finished with exit code 1 
+1

只是为了确认,hibernate.cfg.xml在src/main/resources中? Maven对其项目结构非常特别...... – BlakeP

+0

不,它是src /资源,但即使我将资源移动到src/main,同样的错误仍然存​​在 – TonyGW

+1

您是否设置了Maven以将其包含在最终的构建中?一般来说,Maven对于所有其他文件的所有java文件和src/main/resources都有src/main/java。通过这种结构,Maven可以自动知道所有东西,并且它们都需要包含在内。另外,如果你把它放在src/main/resources中,你不会将它指定为.configure(“resources/hibernate.cfg.xml”),而是指定为.configure(“hibernate.cfg.xml”),除非你创建文件夹在资源文件夹下。 – BlakeP

回答

1

你的Hibernate配置文件不能被发现,因为它不是在当Web应用启动类路径的根......

当你使用Maven,把hibernate.cfg.xml的src/main/resources文件夹中的文件应该会导致它自动复制到WAR文件中的WEB-INF/classes。打开WAR文件并查看hibernate.cfg.xml的放置位置。

如果hibernate.cfg.xml文件不在您的WAR文件中,请仔细检查您的POM中的maven-war-plugin设置。

关于弃用警告,根据​​,建议不要使用buildSessionFactory(),而应该使用buildSessionFactory(ServiceRegistry)。

1

谢谢大家的回复。

最后,我已经想通了。以下是我的HibernateUtil类中的配置。因为我使用的是Hibernate 4.3.5,所以我用最新的方法替换了弃用的方法。此外,我将我的hibernate.cfg.xml移至src/main/java/resources

static { 
     try { 
      Configuration configuration = new Configuration().configure("/resources/hibernate.cfg.xml"); 
      StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()); 
      sessionFactory = configuration.buildSessionFactory(builder.build()); 
     } catch (HibernateException ex) { 
      System.err.println("Initial sessionFactory creation failed." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
    }