2011-11-19 83 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"); 
相关问题