Anuncio

domingo, 2 de marzo de 2014

Como cargar Hibernate.Cfg.Xml desde otro directorio

Hibernate.cfg.xml suele estar en el root de tu proyecto, fuera de todo paquete. Si lo pones en otro directorio te aparecerá el siguiente error:
Initial SessionFactory creation failed.org.hibernate.HibernateException: 
/hibernate.cfg.xml not found
 
Exception in thread "main" java.lang.ExceptionInInitializerError
 at com.mkyong.persistence.HibernateUtil.buildSessionFactory(HibernateUtil.java:25)
 at com.mkyong.persistence.HibernateUtil.<clinit>(HibernateUtil.java:8)
 at com.mkyong.common.App.main(App.java:11)
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)
 at com.mkyong.persistence.HibernateUtil.buildSessionFactory(HibernateUtil.java:13)
 ... 2 more
Para decirle a Hibernate como encontrar hibernate.cfg.xml hay que modificar el argumento del método configure() como se muestra a continuación.
            SessionFactory sessionFactory = new Configuration()
            .configure("/com/companyname/example/hibernate.cfg.xml")
            .buildSessionFactory();
 
            return sessionFactory;

HibernateUtil.java

Aquí se muestra un ejemplo completo para cargarlo desde el directorio “/com/companyname/example/“.
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
 
public class HibernateUtil {
 
 private static final SessionFactory sessionFactory = buildSessionFactory();
 
 private static SessionFactory buildSessionFactory() {
  try {
   // load from different directory
   SessionFactory sessionFactory = new Configuration().configure(
     "/com/companyname/example/hibernate.cfg.xml")
     .buildSessionFactory();
 
   return sessionFactory;
 
  } 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);
  }
 }
 
 public static SessionFactory getSessionFactory() {
  return sessionFactory;
 }
 
 public static void shutdown() {
  // Close caches and connection pools
  getSessionFactory().close();
 }
 
}

FUENTE: http://www.mkyong.com/hibernate/how-to-load-hibernate-cfg-xml-from-different-directory/

No hay comentarios:

Publicar un comentario