2011-11-19 85 views
12

我是Hibernate的新手,讀過這本書「Hibernate的Java持久化」,我試圖從那裏實現這個例子。到目前爲止,我的Ant構建是成功的,但是當我嘗試執行包含我收到此錯誤信息的主要方法的類:hibernate.cfg.xml找不到

19-Nov-2011 18:40:09 org.hibernate.cfg.Environment <clinit> 
INFO: Hibernate 3.2.3 
19-Nov-2011 18:40:09 org.hibernate.cfg.Environment <clinit> 
INFO: hibernate.properties not found 
19-Nov-2011 18:40:09 org.hibernate.cfg.Environment buildBytecodeProvider 
INFO: Bytecode provider name : cglib 
19-Nov-2011 18:40:09 org.hibernate.cfg.Environment <clinit> 
INFO: using JDK 1.4 java.sql.Timestamp handling 
19-Nov-2011 18:40:09 org.hibernate.cfg.Configuration configure 
INFO: configuring from resource: /hibernate.cfg.xml 
19-Nov-2011 18:40:09 org.hibernate.cfg.Configuration getConfigurationInputStream 
INFO: Configuration resource: /hibernate.cfg.xml 
Exception in thread "main" java.lang.ExceptionInInitializerError 
    at persistence.HibernateUtil.<clinit>(Unknown Source) 
    at hello.Driver.main(Unknown Source) 
Caused by: org.hibernate.HibernateException: /hibernate.cfg.xml not found 
    at org.hibernate.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:147) 
    at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:1405) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1427) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1414) 
    ... 2 more 

顯然,Hibernate無法找到我的配置文件,該文件位於在根目錄中。

項目

+lib 
<all required libraries> 
+src 
    +hello 
    HelloWorld.java 
    Message.java 
    message.hbm.xml 
    +persistence 
    HibernateUtil.java 
build.xml 
hibernate.cfg.xml 

我的完整的源代碼可以在這裏找到:http://pastebin.com/bGDUrxUf

我有一個數據庫hibernateapp和表消息的運行MySQL服務器

謝謝:)

回答

15

您的hibernate.cfg.xml需要在src目錄內;否則它不會被Ant的copymetafiles目標覆蓋,所以它不會在編譯的類路徑中結束。

+0

我沒有將它移動到SRC,使用Ant編譯和運行類控股的主要方法爲Java應用程序,並得到了同樣的錯誤? 我需要設置一些全局路徑嗎? – greenLizard

+0

@Agop:確保它結束於類路徑中一個目錄的根目錄。例如,如果您正在運行'java -classpath lib/foo.jar:lib/bar.jar :. hello.HelloWorld',那麼你需要確保它以'.'結尾。 – ruakh

+0

我使用Eclipse運行它,所以我相信類路徑應該沒問題? – greenLizard

4

它不應該在你的根目錄下,它應該在你的類路徑上。

15

hibernate.cfg.xml文件位於項目類路徑的根目錄中。如果你使用Maven,那麼確保它應該像src> resources> hibernate.cfg.xml。

2

您可以使用採用hibernateConfigFile參數的configure(File configFile)方法從其他目錄(不一定是類路徑)加載hibernate.cfg.xml。 (注意,我使用Hibernate 4.3.7)

像這樣:


String hibernatePropsFilePath = "/etc/configs/hibernate.cfg.xml"; 

File hibernatePropsFile = new File(hibernatePropsFilePath); 

Configuration configuration = new Configuration(); 
configuration.configure(hibernatePropsFile); 

StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()); 

ServiceRegistry serviceRegistry = serviceRegistryBuilder.build(); 

SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); 
0

雖然是晚了,解決的辦法是,你需要把資源文件夾中這個配置文件(projectxxxx - >資源)提供了一個maven項目。

1

如果您正在使用Intellij Idea,請在src \ main \ java下創建一個名爲「resources」的文件夾。打開您的項目的模塊設置,從左側選擇「Modules」並在「sources」選項卡中選擇新創建的「resources」文件夾,並將其標記爲「Resources」。 enter image description here

那麼這應該工作

Configuration con = new Configuration().configure("hibernate.cfg.xml"); 
相關問題