2015-06-12 45 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;