Hola Jabatos:
Uno de los puntos importantes a la hora de trabajar con Hibernate es crear la SessionFactory.
La factoría de sesiones debería ser implementada una sola vez, al ser un objeto muy "pesado" en términos de memoria en el procesador. Una vez implementada, la SessionFactory proveerá de objetos session, más ligeros y útiles para las operaciones ...
Resulta que cada implementación de una nueva biblioteca Hibernate trae consigo un método diferente para crear nuestra SessionFactory, lo cual no solo entraña el molestísimo "deprecated" sino la posibilidad de que no funcione correctamente la aplicación.
El código que aquí aporto es una actualizada (versión 4.3) Hibernate SessionFactory
public class HibernateFactory {
private static final SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;
static {
try {
// creando la sessionFactory
Configuration configuration = new Configuration().configure("");
StandardServiceRegistryBuilder serviceRegistryBuilder=new StandardServiceRegistryBuilder();
serviceRegistryBuilder.applySettings(configuration.getProperties());
serviceRegistry = serviceRegistryBuilder.build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Throwable ex) {
System.err.println("Error en creación de session");
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
// acceso al sessionFactory
return sessionFactory;
}
public static void shutdown() {
// cierra el objeto sessionFactory y
// cierra la cache y el pool de conexiones
getSessionFactory().close();
}
}
El acceso a la SessionFactory se realiza por el método get, y además, tenemos un método adicional shutdown para cerrar la factoría y el pool de conexiones de forma segura, al cerrar la aplicación.
Espero que os sea de utilidad,