我正在尝试使用spring 3 mvc的hibernate,但此刻我抛出了这个异常。我想我需要在某个地方定义我的hibernate.cfg.xml
,但不确定在哪里?
我在这里基本上遵循了这个例子http://www.nabeelalimemon.com/blog/2010/05/spring-3-integrated-with-hibernate-part-a/特别是在那里看到了这行代码,假设“神奇地”使用它来找到我的hibernate.cfg文件:
return new Configuration().configure().buildSessionFactory();
我猜这不正确?我目前在src/com/jr/hibernate/
下面是我的cfg文件:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/racingleague</property>
<property name="connection.username">username</property>
<property name="connection.password">password</property>
<property name="hibernate.format_sql">true</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="hibernate.show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--property name="hbm2ddl.auto">update</property-->
<mapping resource="com/jr/model/hibernateMappings/user.hbm.xml"/>
</session-factory>
</hibernate-configuration>
我的hibernate utils类:
package com.jr.utils;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
private static final SessionFactory sessionFactory = buildSessionFactory();
public static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
return new Configuration().configure().buildSessionFactory();
}
catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
}
在这个抽象类中调用:
package com.jr.db;
import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;
import com.jr.utils.HibernateUtils;
public abstract class DbWrapper<T> {
private static SessionFactory sessionFactory = null;
private static Session session;
public DbWrapper() {
setSessionFactory();
}
private void setSessionFactory() {
sessionFactory = HibernateUtils.buildSessionFactory();
session = sessionFactory.getCurrentSession();
}
public boolean addNewItem(T dbItem) {
try {
session.getTransaction().begin();
session.save(dbItem);
session.getTransaction().commit();
} catch (Exception e) {
System.err.println("error exception when adding new item to table"
+ e);
} finally {
session.close();
sessionFactory.close();
}
return false;
}
public abstract boolean removeItem(String uid);
public abstract boolean modifyItem(String uid, T item);
}
这是最初做一些休眠的控制器:
private Logger logger = Logger.getLogger(UserController.class);
private UserDb userDb;
@RequestMapping(value = "/user/registerSuccess", method = RequestMethod.POST)
public String submitRegisterForm(@Valid User user, BindingResult result) {
// validate the data recieved from user
logger.info("validate the data recieved from user");
if (result.hasErrors()) {
logger.info("form has "+result.getErrorCount()+" errors");
return "account/createForm";
} else{
// if everthings ok, add user details to database
logger.info("if everthings ok, add user details to database");
userDb = new UserDb();
userDb.addNewItem(user);
// display success and auto log the user to the system.
return "account/main";
}
}
提前干杯。我还将所有表的hibvernate xml映射都放在与hibernate.cfg.xml文件相同的位置
答案 0 :(得分:26)
不要将hibernate.cfg.xml
文件放在src/com/jr/hibernate/
目录下,而是将其放在src
目录下。然后它将自动出现在WEB-INF/classes
目录中,如此处的人员所述。
答案 1 :(得分:13)
hibernate.cfg.xml
。
如果您使用maven构建项目,请将hibernate.cfg.xml放在src/main/resources
目录中,以便在构建war包时,它将自动放在/WEB-INF/classes
。< / p>
如果不使用maven,请将文件直接放在WEB-INF/classes
目录中。
答案 2 :(得分:3)
hibernate.cfg.xml
应该在WEB-INF/classes
。或者,您可以通过将相应的参数传递给configure(..)
方法从自定义位置加载它。
答案 3 :(得分:2)
如果您使用Maven,则应将文件hibernate.cfg.xml放在Intellij IDEA中的以下路径/src/main/java/resources/hibernate.cfg.xml中。然后,在运行应用程序类中,只需插入行:
SessionFactory factory = new 。配置()配置(&#34;的hibernate.cfg.xml&#34)。addAnnotatedClass()buildSessionFactory();
答案 4 :(得分:0)
在IntelliJ中转到&#34;打开项目设置&#34; &GT;&GT;模块&gt;&gt; Hibernate并定位项目中使用的hibernate.cfg.xml文件。
答案 5 :(得分:0)
我有同样的问题并将hibernate.cfg.xml移到src / main / resources目录中解决,它会自动放在/ WEB-INF / classes中。
答案 6 :(得分:0)
即使我在hibernate.cfg.xml
文件夹下有src
,我也会得到
org.hibernate.HibernateException: /hibernate.cfg.xml not found
运行mvn clean install
之后。通过尝试和错误,我能够通过将hibernate.cfg.xml
折叠后的src
删除并添加到其他地方来解决该问题。运行应用程序(在我的情况下这是一个主类)。在此期间,我仍然会收到错误消息。并将其添加回src
文件夹并朗读主类。 It worked!