我是Hibernate的新手,阅读本书“使用Hibernate实现Java持久性”,我试图从那里实现这个例子。到目前为止,我的Ant构建是成功的,但是当我尝试执行包含main方法的类时,我收到此错误消息:
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
我有一个运行MySQL服务器,带有数据库hibernateapp和表消息
谢谢:)
答案 0 :(得分:16)
hibernate.cfg.xml文件应该位于项目类路径的根目录中。如果您使用Maven,请确保它应该像src&gt;资源&gt; hibernate.cfg.xml中。
答案 1 :(得分:15)
您的hibernate.cfg.xml
需要位于src
目录中;否则它不会被Ant的copymetafiles
目标覆盖,所以它不会在你编译的类路径中结束。
答案 2 :(得分:5)
它不应该在你的根目录中,它应该在你的类路径上。
答案 3 :(得分:2)
您可以使用hibernate.cfg.xml
configure(File configFile)
参数的hibernateConfig
方法从其他目录(不一定是类路径)加载File
。
(注意,我正在使用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);
答案 4 :(得分:2)
如果您正在处理Intellij Idea
,请在src \ main \ java下创建一个名为“resources”的文件夹。打开项目的模块设置,从左侧选择“模块”,在“源”选项卡中选择新创建的“资源”文件夹并将其标记为“资源”。在这个新创建的“resources”文件夹中创建hibernate.cfg.xml
文件。
然后这应该工作
Configuration con = new Configuration().configure("hibernate.cfg.xml");
答案 5 :(得分:0)
虽然现在已经很晚了,但解决方案是您需要将此配置文件放在资源文件夹(projectxxxx-&gt; Resources)中,前提是它是一个maven项目。
答案 6 :(得分:0)
默认情况下,XML配置文件应位于CLASSPATH的根目录中。
您可以使用以下方法选择其他XML或路径配置文件:
SessionFactory sessionFactory;
try {
Logger log = Logger.getLogger(LOG);
final String HIB_CONFIG = "/path/to/hibernate.cfg.xml";
final File hibernate = new File(HIB_CONFIG);
log.info("Try to init SessionFactory: " + HIB_CONFIG);
// Create the SessionFactory from hibernate.cfg.xml
if (hibernate.exists()) {
log.info("File exists. Init with custom file.");
sessionFactory = new Configuration()
.configure(hibernate)
.buildSessionFactory();
} else {
log.info("File doesn't exist. Init with default project file.");
sessionFactory = new Configuration().configure().buildSessionFactory();
}
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
有关更多信息,请访问session-configuration