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:
[code lang=”xml”]
<session-factory>
<!– Other elements goes here –>
<property name="hibernate.current_session_context_class">
org.hibernate.context.internal.ThreadLocalSessionContext
</property>
</session-factory>
[/code]
If you are not adding the above configuration in your configuration file, you would get the following exception while getting the session.
[code]
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)
[/code]
HibernateUtil.java
[code lang=”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();
}
}
[/code]
Leave a Reply