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

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>