Reputation: 18108
I'm trying to use hibernate with spring 3 mvc but at the moment I get this exception thrown. I think I need to define my hibernate.cfg.xml
somewhere, but not sure where?
I basically followed this example here http://www.nabeelalimemon.com/blog/2010/05/spring-3-integrated-with-hibernate-part-a/ And in particularly saw this line of code there that suppose to "magically" find my hibernate.cfg file using this:
return new Configuration().configure().buildSessionFactory();
I'm guessing that is not correct? i currently have my hibernate.cfg file inside src/com/jr/hibernate/
below is my cfg file:
<?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>
my hibernate utils class:
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);
}
}
}
which gets called bu this abstract class:
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);
}
And here is the controller that originally does some hibernate stuff:
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";
}
}
Cheers in advance. I also have all my table hibvernate xml mappings in the same location as my hibernate.cfg.xml file
Upvotes: 11
Views: 90224
Reputation: 4706
Even if i had hibernate.cfg.xml
under src
folder, i get
org.hibernate.HibernateException: /hibernate.cfg.xml not found
after running mvn clean install
. With Try and error i was able to resolve it by removing hibernate.cfg.xml
from src
folded and add to to somewhere else. Run the app(It is a main class in my case). During this I still get the error. and add it back to src
folder and rum the main class. It worked!
Upvotes: 0
Reputation: 31
If you using Maven you should put file hibernate.cfg.xml in following path /src/main/java/resources/hibernate.cfg.xml in Intellij IDEA. Then, in your run application class just insert line:
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass().buildSessionFactory();
Upvotes: 3
Reputation: 21
I have the same problem and moved hibernate.cfg.xml to the src/main/resources directory solved, it will be automatically be placed in /WEB-INF/classes.
Upvotes: 0
Reputation: 119
In IntelliJ go to "Open Project Settings" >> Modules >> Hibernate and target your hibernate.cfg.xml file used in your project.
Upvotes: 1
Reputation: 19194
hibernate.cfg.xml
must be found in the root of the classpath when the webapp is started.
If you are using maven to build the project, put hibernate.cfg.xml in the src/main/resources
directory so that when you build the war package, it will be automatically be placed in /WEB-INF/classes
.
If not using maven, place the file directly in your WEB-INF/classes
directory.
Upvotes: 14
Reputation: 40160
Instead of placing hibernate.cfg.xml
file under src/com/jr/hibernate/
directory, place it under src
directory. It will then automatically appear in WEB-INF/classes
directory, as mentioned by the folks here.
Upvotes: 28
Reputation: 597016
hibernate.cfg.xml
should be in WEB-INF/classes
. Alternatively, you can load it from a custom location by passing the corresponding argument to the configure(..)
method.
Upvotes: 3