2015-06-12 43 views
3

更新冬眠4和改变一些必要的设置,我得到以下错误后:Java.lang.NoSuchMethodError:org.hibernate.SessionFactory.openSession()Lorg /休眠/经典/会话更新后冬眠4

SEVERE: Servlet.service() for servlet [default] in context with path [/ESBCollector] threw exception [Filter execution threw an exception] with root cause 
java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session; 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:328) 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.getSession(SessionFactoryUtils.java:208) 
    at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.getSession(OpenSessionInViewFilter.java:294) 
    at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:208) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

它看起来像hibernate3仍然被用来打开会话。任何想法,我忘了这么做?

+2

查看堆栈跟踪...您仍然使用旧的'OpenSessinInViewFilter'而不是hibernate4。 –

+0

看起来像你的春天版本不兼容休眠4你也应该升级你的休眠版本。 – Jens

+0

是的,但我不知道在哪里可以找到它。但是你的评论确实得到了满足思考,我发现它已经知道了,所以解决了。谢谢。 (@M。Deinum) –

回答

2

不得不改变的OpenSessionInViewFilter在web.xml

1

你需要运行mvn dependency:tree和搜索在输出的Hibernate 3罐。当你找到的依赖添加Hibernate 3到你的依赖关系树,你需要简单地排斥他们,就像这样:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-orm</artifactId> 
    <version>${spring.version}</version> 
    <exclusions> 
     <exclusion> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
+1

不,他没有。他只是使用了错误的'OpenSessionInViewFilter'而不是hibernate4版本。 –

+0

的确如此,但我在这里描述的问题仍然有可能,所以我会留下答案,因为它可能会帮助其他人。 –

+0

虽然它可能不是这个问题的有效答案,因此并不真正有用。这个问题清楚地表明,hibernate4被使用,并且还有一些来自hibernate3的遗留问题。 –

1

您使用hibernate4但是你web.xml仍用[OpenSessionInViewFilter对于Hibernate3的而不是[OpenSessionInViewFilter ]为hibernate4。

要修复找到web.xml中的过滤器。

<filter> 
    <filter-name>osiv-filter</filter-name> 
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> 
</filter> 

并配有4

<filter> 
    <filter-name>osiv-filter</filter-name> 
    <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> 
</filter> 
0

更换3还有就是你已经在代码中进口旧(Hibernate3中)班这应该是明朗的可能性,像

import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 
// needs to be replaced to 
import org.springframework.orm.hibernate4.support.HibernateDaoSupport;