openSession and getCurrentSession Difference in Hibernate

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();
	}
}

Comments

comments

About Krishna Srinivasan

He is Founder and Chief Editor of JavaBeat. He has more than 8+ years of experience on developing Web applications. He writes about Spring, DOJO, JSF, Hibernate and many other emerging technologies in this blog.

Comments

  1. Gajraj Gupta says:

    Sir could you please tell which one to use when? Like what is the practical difference between both of these function. In almost all forums this is answer but the real use of these functions is yet not understandable to me.

Speak Your Mind

*