Hibernate + spring version compatibility
Asked Answered
D

4

26

H, I want to upgrade Spring libraries in my web app. Since I am using Hibernate as well, I wanted to know if there is a way I could find which version of Hibernate is compatible with a specific version of Spring.

I have already searched google and read similar posts of SO, but I want to know if there is a way to compare different versions of libraries/framework.

My current setup:

Spring V2.5
Hibernate : org.hibernate.hibernate 3.2.6.ga
            org.hibernate.hibernate-annotations 3.3.1.ga

The latest version of Hibernate available in my repository is 3.5.4-FINAL and 3.5.6-FINAL for the above artifacts

UPDATE I am getting this error after upgrading Hibernate to 3.5.4 from 3.2 with Spring 2.5 (unchanged)

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' 
defined in class path resource [applicationContext-hibernate.xml]: Initialization of bean failed; 
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' 
defined in class path resource [applicationContext-hibernate.xml]: Invocation of init method failed; nested exception is java.lang.IncompatibleClassChangeError: 
Implementing class
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:881)
        at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:597)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:366)
        at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
        at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)
        at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
        at org.apache.catalina.core.StandardService.start(StandardService.java:525)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Dipterous answered 2/8, 2013 at 12:57 Comment(0)
D
38

You can check this out in the spring-orm Maven POM.

For example to check the version of Hibernate used by Spring 3.2.3.RELEASE, you can issue the following shell command:

grep -A 1 hibernate- ~/.m2/repository/org/springframework/spring-orm/3.2.3.RELEASE/spring-orm-3.2.3.RELEASE.pom

The command above would result in the following output:

      <artifactId>hibernate-annotations</artifactId>
      <version>3.4.0.GA</version>
--
      <artifactId>hibernate-core</artifactId>
      <version>4.1.9.Final</version>
--
      <artifactId>hibernate-core</artifactId>
      <version>3.3.2.GA</version>
--
      <artifactId>hibernate-entitymanager</artifactId>
      <version>4.1.9.Final</version>
--
      <artifactId>hibernate-entitymanager</artifactId>
      <version>3.4.0.GA</version>

And from the output above we can deduce that Spring 3.2.3.RELEASE supports Hibernate 4.1.9.Final and 3.3.2.GA .

Of course you can try to use Spring with different version of Hibernate, but the versions from the POM are the less likely to give you some issues.

Diligent answered 2/8, 2013 at 14:42 Comment(0)
K
6

In your Eclipse IDE this can be found out quite easily.

  • Open the pom.xml in default editor in IDE.
  • Now navigate to specific dependency where spring-orm is defined.
  • If you hover over the definition and perform a CTRL + LEFT_MOUSE_CLICK it will open the spring-orm pom xml.
  • Here you can find the dependency version used for hibernate-entitymanager.

See this animation:

enter image description here

Kainite answered 9/7, 2018 at 15:7 Comment(0)
E
5

If you can't execute the grep command in windows.. navigate to your .m2\repository\org\springframework\spring-orm\4.2.5.RELEASE\spring-orm-4.2.5.RELEASE.pom file location. Open pom file in an editor and search for the word "hibernate" you can find the dependencies for your spring version. [grep command also uses same approach]

Elsyelton answered 16/3, 2016 at 10:20 Comment(0)
I
0

Check dependencies of the package spring-data-jpa here:

https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa

Brief summary:

  • version 1.* depends on Hibernate 3.6.
  • version 2.0 - 2.2 depends on Hibernate 5.2.
  • version 2.3 - 2.5 depends on Hibernate 5.4.
  • version 2.6 depends on Hibernate 5.6.
Indemnify answered 11/1, 2022 at 10:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.