package com.jpa.util;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class HibernateUtil {
private static final Logger log = Logger.getLogger(HibernateUtil.class);
/*
* Since we will be using annotated classes, it is best to maintain a list
* of such classes so we add them up easily
*/
@SuppressWarnings({"unchecked", "rawtypes", "serial"})
private static final List<Class<?>> classList = new ArrayList() {{
add(com.jpa.model.Human.class);
}};
private static SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
/*
* Load up the configuration using the hibernate.cfg.xml
*/
Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");
/*
* Build the registry using the properties in the configuration
*/
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
/*
* Now load the classes
*/
for (Class<?> pojoClass : classList) {
log.info("Adding annotated class : " + pojoClass.getCanonicalName());
configuration.addAnnotatedClass(pojoClass);
}
/*
* and finally buils the session factory
*/
return configuration.buildSessionFactory(serviceRegistry);
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
getSessionFactory().close();
}
/**
* The main utility method to be used to retreive the transaction.
*
* @return {@link Transaction} The transaction of the current session
*/
public static Transaction getTransaction() throws Exception {
Session s = getSessionFactory().getCurrentSession();
Transaction tx = s.beginTransaction();
tx.setTimeout(10);
return tx;
//return getSessionFactory().getCurrentSession().beginTransaction();;
}
}