Estoy intentando utilizar hibernación con el muelle 3 MVC pero al llegar el momento en que esta excepción lanzada. Creo que tengo que definir mi hibernate.cfg.xml
en algún lugar, pero no estoy seguro de dónde?org.hibernate.HibernateException: No se encontró /hibernate.cfg.xml
básicamente he seguido este ejemplo aquí http://www.nabeelalimemon.com/blog/2010/05/spring-3-integrated-with-hibernate-part-a/ Y en particular vi esta línea de código que hay que supone que "mágicamente" encontrar mi archivo hibernate.cfg usando esto:
return new Configuration().configure().buildSessionFactory();
supongo que no es correcto ? Actualmente tengo mi archivo hibernate.cfg dentro src/com/jr/hibernate/
a continuación es mi archivo 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>
clase
mi hibernación 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);
}
}
}
la que es llamada bu esta clase abstracta:
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);
}
Y aquí es el controlador que originalmente hace algo de hibernación cosas:
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";
}
}
Saludos con anticipación. También tengo todas mis asignaciones de xml de hibnate de tabla en la misma ubicación que mi archivo hibernate.cfg.xml
aplausos. funciona. Tengo otra pregunta. parece que mi aplicación no puede encontrar mis asignaciones de xml de hibernación. Lo tengo en lugares en com.jr.hibernateMappings pero el build.xml no parece construir y compilar mis archivos hbm.xml. ¿está en el lugar equivocado de nuevo? ¿necesita estar en la carpeta WAR/WEB-INF/classes? Me gustaría mucho prefiero que sea dentro del directorio src, si es posible – jonney
Gracias ... después de mover mi archivo (hibernate.cfg.xml) a SRC se localizará el archivo muchas gracias de nuevo –