我正在尝试用Hibernate和Maven开始项目。
我遇到了这样的例外:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" org.hibernate.HibernateException: /hibernate.cfg.xml not found
at org.hibernate.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:170)
at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:2176)
at org.hibernate.cfg.Configuration.configure(Configuration.java:2157)
at org.hibernate.cfg.Configuration.configure(Configuration.java:2137)
at FirstHibernate.com.myhib.CRUDS.CrudsOps.main(CrudsOps.java:15)
这是我的项目结构的截图,(hibernate.cfg.xml在src /中): http://imageshack.us/photo/my-images/692/screenshotxba.jpg/
CrudsOps.java
package FirstHibernate.com.myhib.CRUDS;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class CrudsOps {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SessionFactory sf = new Configuration().configure().buildSessionFactory();
System.out.println("Cfg and hbm files loaded succesfully");
Session session = sf.openSession();
session.beginTransaction();
System.out.println("Transaction began");
}
}
的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>FirstHibernate</groupId>
<artifactId>com.myhib</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>com.myhib Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.8.Final</version>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
</dependency>
</dependencies>
<build>
<finalName>com.myhib</finalName>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
</project>
什么可能是该例外的来源?
答案 0 :(得分:16)
正如@JBNizet所说,你的hibernate.cfg.xml
应该在src / main / resources中。在src中,它不会被添加到运行时的类路径中。
如果您在Eclipse中运行项目,请不要忘记在构建路径配置中的项目首选项中检查src/main/resources
是否未从类路径中排除,并且确实是源文件夹。
答案 1 :(得分:8)
该文件应位于运行时类路径中。 Maven将target/classes
下的资源复制到src/main/resources
文件夹。所以你的配置文件应该在那里。
也就是说,您没有显示加载文件的代码,因此可能存在其他问题。
答案 2 :(得分:1)
您可以使用带有hibernateConfig File参数的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);
答案 3 :(得分:0)
For the People who are facing this issue while deploying on linux machine
您需要将hibernate.cfg.xml复制到war项目的classes目录中。
In Eclipse/Maven Project: (During Development)
您需要将hibernate.cfg.xml复制到Eclipse / Maven项目的src目录中。
答案 4 :(得分:0)
如果您在Intellij Idea中工作,那么在src \ main \ java下创建一个名为“resources”的文件夹。打开项目的模块设置,从左侧选择“模块”,在“源”选项卡中选择新创建的“资源”文件夹,并将其标记为“资源”。
然后这应该工作
Configuration con = new Configuration().configure("hibernate.cfg.xml");
答案 5 :(得分:0)
如果您使用的是 Netbeans ,请将您的hibernate.cfg.xml
文件放入"Build > classes >"
目录中,它将起作用。