When you get a session from the session factory object in hibernate, either you can use openSession or getCurrentSession. If you are using the openSession method, it opens a new session freshly. If you use getCurrentSession, it gets the current session from the existing thread context instead of opening a new session. You should have configured hibernate.current_session_context_class in the hibernate configuration file to use getCurrentSession method. The same entry looks like this:
<session-factory> <!-- Other elements goes here --> <property name="hibernate.current_session_context_class"> org.hibernate.context.internal.ThreadLocalSessionContext </property> </session-factory>
If you are not adding the above configuration in your configuration file, you would get the following exception while getting the session.
Exception in thread "main" org.hibernate.HibernateException: No CurrentSessionContext configured! at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1010) at javabeat.net.hibernate.HibernateUtil.main(HibernateUtil.java:16)
HibernateUtil.java
package javabeat.net.hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.metamodel.MetadataSources; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; public class HibernateUtil { public static void main (String args[]){ Configuration configuration = new Configuration().configure(); ServiceRegistry registry = new ServiceRegistryBuilder().configure().build(); SessionFactory sessionFactory = new MetadataSources(registry) .addAnnotatedClass(Employee.class).buildMetadata().buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); //Session session = sessionFactory.openSession(); } }