Java Hibernate + spring 版本兼容性
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18017466/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Hibernate + spring version compatibility
提问by Rakesh
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.
H,我想在我的 Web 应用程序中升级 Spring 库。由于我也在使用 Hibernate,我想知道是否有办法找到哪个版本的 Hibernate 与特定版本的 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.
我已经搜索过谷歌并阅读了类似的 SO 帖子,但我想知道是否有办法比较不同版本的库/框架。
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
我的存储库中可用的最新版本的 Hibernate 是3.5.4-FINAL
并且3.5.6-FINAL
用于上述工件
UPDATEI am getting this error after upgrading Hibernate to 3.5.4 from 3.2 with Spring 2.5 (unchanged)
更新我在使用 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.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.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)
采纳答案by Henryk Konsek
You can check this out in the spring-orm
Maven POM.
您可以在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:
例如要检查 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
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 .
从上面的输出我们可以推断出 Spring 3.2.3.RELEASE 支持 Hibernate 4.1.9.Final 和 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.
当然,您可以尝试将 Spring 与不同版本的 Hibernate 一起使用,但是来自 POM 的版本不太可能给您带来一些问题。
回答by Buru
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]
如果您无法在 Windows 中执行 grep 命令.. 导航到您的.m2\repository\org\springframework\spring-orm\4.2.5.RELEASE\spring-orm-4.2.5.RELEASE.pom
文件位置。在编辑器中打开 pom 文件并搜索“hibernate”这个词,你可以找到你的 spring 版本的依赖项。[grep 命令也使用相同的方法]
回答by Saikat
In your Eclipse IDE this can be found out quite easily.
在您的 Eclipse IDE 中,可以很容易地发现这一点。
- 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_CLICKit will open the spring-orm pom xml.
- Here you can find the dependency version used for
hibernate-entitymanager
.
pom.xml
在 IDE 中打开默认编辑器。- 现在导航到
spring-orm
定义的特定依赖项。 - 如果您将鼠标悬停在定义上并执行 aCTRL + LEFT_MOUSE_CLICK它将打开 spring-orm pom xml。
- 在这里您可以找到用于
hibernate-entitymanager
.
See this animation:
看这个动画: