Hibernate + spring 版本兼容性

Posted

技术标签:

【中文标题】Hibernate + spring 版本兼容性【英文标题】:Hibernate + spring version compatibility 【发布时间】:2013-08-03 18:11:24 【问题描述】:

H,我想在我的 Web 应用程序中升级 Spring 库。由于我也在使用 Hibernate,所以我想知道是否有办法找到哪个版本的 Hibernate 与特定版本的 Spring 兼容。

我已经搜索过谷歌并阅读了类似的 SO 帖子,但我想知道是否有办法比较不同版本的库/框架。

我目前的设置:

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

我的存储库中可用的最新版本的 Hibernate 是 3.5.4-FINAL3.5.6-FINAL 用于上述工件

更新 使用 Spring 2.5(未更改)将 Hibernate 从 3.2 升级到 3.5.4 后出现此错误

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)

【问题讨论】:

【参考方案1】:

在这里检查包spring-data-jpa的依赖关系:

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

简要总结:

版本 1.* 依赖于 Hibernate 3.6。 2.0 - 2.2 版本依赖于 Hibernate 5.2。 2.3 - 2.5 版本依赖于 Hibernate 5.4。 2.6 版依赖于 Hibernate 5.6。

【讨论】:

【参考方案2】:

在您的 Eclipse IDE 中可以很容易地找到它。

在 IDE 的默认编辑器中打开 pom.xml。 现在导航到定义spring-orm 的特定依赖项。 如果将鼠标悬停在定义上并执行 CTRL + LEFT_MOUSE_CLICK,它将打开 spring-orm pom xml。 在这里您可以找到用于hibernate-entitymanager 的依赖版本。

看这个动画:

【讨论】:

【参考方案3】:

如果您无法在 Windows 中执行 grep 命令。请导航到您的 .m2\repository\org\springframework\spring-orm\4.2.5.RELEASE\spring-orm-4.2.5.RELEASE.pom 文件位置。在编辑器中打开 pom 文件并搜索单词“hibernate”,您可以找到您的 spring 版本的依赖项。 [grep 命令也使用相同的方法]

【讨论】:

【参考方案4】:

您可以在spring-orm Maven POM 中查看。

例如要检查 Spring 3.2.3.RELEASE 使用的 Hibernate 版本,可以发出以下 shell 命令:

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

上面的命令会产生以下输出:

      <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>

从上面的输出我们可以推断出 Spring 3.2.3.RELEASE 支持 Hibernate 4.1.9.Final 和 3.3.2.GA。

当然,您可以尝试将 Spring 与不同版本的 Hibernate 一起使用,但来自 POM 的版本不太可能给您带来一些问题。

【讨论】:

以上是关于Hibernate + spring 版本兼容性的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 1.5.x 与 Hibernate 4.x 的兼容性

Hibernate - Spring Security - Spring MVC 版本

Struts2 + Spring + Hibernate 分页

Spring 5和hibernate 4兼容吗?

Spring Cloud与Spring Boot版本匹配关系

spring JPA整合hibernate,IDEA社区版,Java