1

While using Hibernate 5.1.0 in Spring 5.1.3 I see NoClassDefFoundError

Error is reported for missing class SharedSessionContractImplementor. Which is valid because this was added in Hibernate 5.2.0 However project is configured to use 5.1.0.

Pom.xml

<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.1.0.Final</version>

<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.1.3.RELEASE</version>

Context

<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" scope="singleton">
    <property name="hibernateProperties">
        <bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean">
            <property name="targetBeanName" value="appHibernateProperties"/>
            <property name="propertyPath" value="hibernateProperties"/>
        </bean>
    </property>
    <property name="configLocations">
        <list>
            <value>classpath*:hibernateComponentMappings.cfg.xml</value>
        </list>
    </property>
</bean>

<alias name="sessionFactory" alias="sessionFactoryReporting"/>

<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory">
        <ref bean="sessionFactory"/>
    </property>
</bean>

Exception

Caused by: org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: org/hibernate/engine/spi/SharedSessionContractImplementor
        at org.springframework.orm.hibernate5.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:577)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:378)
        at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:474)
        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:289)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
        at com.xxx.xxx.dao.xxx$$EnhancerBySpringCGLIB$$43e03fc6.getResourceToExtensionMapForCategory(<generated>)
        at com.xx.xx.xx.xx.loadMappings(JuelSmpExtensionLoader.java:83)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
        ... 66 more
Caused by: java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: org/hibernate/engine/spi/SharedSessionContractImplementor
        at org.springframework.orm.hibernate5.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:544)
        ... 81 more
Caused by: java.lang.NoClassDefFoundError: org/hibernate/engine/spi/SharedSessionContractImplementor
        ... 82 more
Caused by: java.lang.ClassNotFoundException: org.hibernate.engine.spi.SharedSessionContractImplementor
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
5
  • 2
    then you need to add Hibernate 5.2.0 Commented Jan 11, 2019 at 7:01
  • Can't upgrade to 5.2.0 because of a dependency from third party component Commented Jan 11, 2019 at 7:32
  • Perhaps you could rewrite that missing class into your project ? Commented Jan 11, 2019 at 7:37
  • Perhaps it will bring too many dependencies. When app was in 4.3 and hibernate 5.1 spring everything was fine. Now when spring is upgraded to 5.1.3 and hibernate is kept at 5.1 i see this issue. Commented Jan 11, 2019 at 8:01
  • 1
    AFAIK the minimal version of Hibernate for Spring Framework 5.1 is hibernate 5.2... So either don't upgrade Spring or upgrade Hibernate. Commented Jan 11, 2019 at 10:50

1 Answer 1

3

This was a problem with HibernateTransactionManager in spring 5.1.3 Which is fixed in spring 5.1.4 as per https://github.com/spring-projects/spring-framework/issues/22089

So upgrading spring to 5.1.4 will fix this issue.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.