package org.jstryker.database;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
/**
* Hibernate tool to help with {@link Session}.
*/
public class HibernateHelper {
private static Session session;
private static SessionFactory sessionFactory;
/**
* Creates or returns current {@link SessionFactory}.
* @return Current {@link SessionFactory}.
*/
public static SessionFactory sessionFactory() {
if (sessionFactory == null) {
Configuration configuration = new Configuration().configure();
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
sessionFactory = configuration.configure().buildSessionFactory(serviceRegistry);
}
return sessionFactory;
}
/**
* Opens or returns current {@link Session} with {@link org.hibernate.Transaction} started.
* @return Current {@link Session}.
*/
public static Session currentSession() {
if (session == null) {
session = sessionFactory().openSession();
session.beginTransaction();
}
return session;
}
/**
* Rollback current {@link org.hibernate.Transaction} and closes {@link Session}.
*/
public static void close() {
session.getTransaction().rollback();
session.close();
session = null;
}
}