I'm stuck due to some silly mistake somewhere but not able to figure out !
Hibernate 4.2.6
I have referred to this question, asked several times previously, for example here
hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration SYSTEM "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.bytecode.use_reflection_optimizer">false</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <property name="show_sql">true</property> <property name="hibernate.current_session_context_class">org.hibernate.context.ThreadLocalSessionContext</property> <mapping resource="Event.hbm.xml"></mapping> </session-factory> </hibernate-configuration>
Event.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.db.pojo.Event" table="Events"> <id name="id" column="Id"> <generator class="native"></generator> </id> <property name="title" column="Title"></property> <property name="date" column="Date" type="timestamp"></property> </class> </hibernate-mapping>
HibernateUtil
package com.db.util; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistryBuilder; public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory() { // TODO Auto-generated method stub Configuration configuration = new Configuration(); configuration.configure("hibernate.cfg.xml"); ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder() .applySettings(configuration.getProperties()); return configuration.buildSessionFactory(serviceRegistryBuilder .buildServiceRegistry()); } public static SessionFactory getSessionFactory() { return sessionFactory; } }
Whenever I try this :
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
I get :
Exception in thread "main" org.hibernate.HibernateException: No CurrentSessionContext configured! at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:988) at test.EventManager.createAndStoreEvent(EventManager.java:27) at test.EventManager.main(EventManager.java:17)
Edited after executing on my personal laptop
Now I'm suspicious about the dtd - are Hibernate 3.0 jars being referred somewhere while the local ones are ignored, even though SYSTEM is specified? I got the previous exception(no current context) while executing the code on a machine with restricted Internet access. But when I executed the same on my personal laptop :
eventDesciption : Team eventDate : 2013-12-12 Nov 28, 2013 8:55:59 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> INFO: HCANN000001: Hibernate Commons Annotations {4.0.4.Final} Nov 28, 2013 8:55:59 PM org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {4.2.6.Final} Nov 28, 2013 8:55:59 PM org.hibernate.cfg.Environment <clinit> INFO: HHH000206: hibernate.properties not found Nov 28, 2013 8:55:59 PM org.hibernate.cfg.Environment buildBytecodeProvider INFO: HHH000021: Bytecode provider name : javassist Nov 28, 2013 8:55:59 PM org.hibernate.cfg.Configuration configure INFO: HHH000043: Configuring from resource: hibernate.cfg.xml Nov 28, 2013 8:55:59 PM org.hibernate.cfg.Configuration getConfigurationInputStream INFO: HHH000040: Configuration resource: hibernate.cfg.xml Nov 28, 2013 8:55:59 PM org.hibernate.cfg.Configuration addResource INFO: HHH000221: Reading mappings from resource: resources/Event.hbm.xml Nov 28, 2013 8:55:59 PM org.hibernate.cfg.Configuration doConfigure INFO: HHH000041: Configured SessionFactory: null Nov 28, 2013 8:55:59 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) Nov 28, 2013 8:55:59 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Hibernate connection pool size: 20 Nov 28, 2013 8:55:59 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000006: Autocommit mode: false Nov 28, 2013 8:55:59 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test] Nov 28, 2013 8:55:59 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000046: Connection properties: {user=root, password=****} Nov 28, 2013 8:56:00 PM org.hibernate.dialect.Dialect <init> INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect Nov 28, 2013 8:56:00 PM org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreation INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4 Nov 28, 2013 8:56:00 PM org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService INFO: HHH000399: Using default transaction strategy (direct JDBC transactions) Nov 28, 2013 8:56:00 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init> INFO: HHH000397: Using ASTQueryTranslatorFactory Nov 28, 2013 8:56:00 PM org.hibernate.internal.SessionFactoryImpl buildCurrentSessionContext ERROR: HHH000302: Unable to construct current session context [org.hibernate.context.ThreadLocalSessionContext] org.hibernate.service.classloading.spi.ClassLoadingException: Unable to load class [org.hibernate.context.ThreadLocalSessionContext] at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:152) at org.hibernate.internal.SessionFactoryImpl.buildCurrentSessionContext(SessionFactoryImpl.java:1544) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:516) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1790) at com.db.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:19) at com.db.util.HibernateUtil.<clinit>(HibernateUtil.java:9) at test.EventManager.createAndStoreEvent(EventManager.java:27) at test.EventManager.main(EventManager.java:17) Caused by: java.lang.ClassNotFoundException: Could not load requested class : org.hibernate.context.ThreadLocalSessionContext at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl$AggregatedClassLoader.findClass(ClassLoaderServiceImpl.java:319) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:149) ... 7 more Exception in thread "main" org.hibernate.HibernateException: No CurrentSessionContext configured! at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:988) at test.EventManager.createAndStoreEvent(EventManager.java:27) at test.EventManager.main(EventManager.java:17)
As per the best of my knowledge, your configuration is not proper for current session. Instead of
<property name="hibernate.current_session_context_class">org.hibernate.context.ThreadLocalSessionContext</property>
use
<property name="hibernate.current_session_context_class">thread</property>
For more information on this, please visit this link:
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/architecture.html#architecture-current-session
Specially, read the last lines of last paragraph.
For those who're using Hibernate 4.1,
<property name="hibernate.current_session_context_class">org.hibernate.context.internal.ThreadLocalSessionContext</property>
Reference: https://docs.jboss.org/hibernate/orm/4.1/javadocs/org/hibernate/context/internal/ThreadLocalSessionContext.html
Try changing
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
to :
Session session = HibernateUtil.getSessionFactory().openSession();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With