2012-01-10 36 views
19

Tôi đang cố gắng tích hợp dự án mùa xuân đã làm việc của tôi với hibernate, nhưng đây là lỗi tôi đang nhận được khi khởi động.java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession() Lorg/hibernate/classic/Session

EVERE: Servlet.service() for servlet [appServlet] in context with path [/TelephoneDirectory] threw exception [Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;] with root cause 
java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session; 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:322) 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.getSession(SessionFactoryUtils.java:233) 
    at org.springframework.orm.hibernate3.HibernateTemplate.getSession(HibernateTemplate.java:457) 
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:393) 
    at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374) 
    at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:912) 
    at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:904) 
    at com.emumba.telephonedirectory.repository.JdbcPersonDao.getPersonsList(JdbcPersonDao.java:36) 
    at com.emumba.telephonedirectory.service.SimpleDirectoryManager.getAllPersons(SimpleDirectoryManager.java:23) 
    at com.emumba.telephonedirectory.web.HomeController.home(HomeController.java:42) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:212) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

Tôi có googled nó nhưng tất cả tôi có thể tìm thấy được rằng vấn đề tương tự đã được gây ra bởi các bản sao trong classpath nhưng tôi đã xem xét rất chặt chẽ và tôi không nghĩ rằng họ là bất kỳ bản sao trong classpath của tôi. (Có thể tôi đã sai lầm.) Heres một ảnh chụp màn hình của lọ trong classpath của tôi enter image description here

tôi gặp khó khăn, bất kỳ trợ giúp sẽ được đánh giá cao

EDIT: Tìm kiếm org.hibernate.SessionFactory cho

enter image description here

+1

Bạn nhận được bao nhiêu kết quả nếu bạn tìm kiếm 'org.hibernate.SessionFactory' bằng cách sử dụng' ctrl-shift-t'? – earldouglas

+0

Bạn đang sử dụng maven - sau đó thử phụ thuộc: cây để có được một cấu trúc cây của phụ thuộc của bạn. Bạn cũng có thể tìm kiếm tệp ".classpath" của bạn cho các bản sao. –

+0

@ James tôi đang chỉnh sửa câu hỏi để thêm ảnh chụp màn hình cho tìm kiếm org.hibernate.SessionFactory – khizar

Trả lời

32

vấn đề là bạn có hibernate-core-4.0.0.Final.jar trong classpath của bạn, nhưng mùa xuân 3.1 sử dụng hibernate-core-3.6.0.Final.jar (xem here xuân 3.1 tạo tác và phụ thuộc).

Xóa Hibernate 4.0 và đặt Hibernate 3.6 thay vào đường dẫn lớp của bạn.

BTW, có thể có thêm một số kết quả phù hợp khác nữa. Tốt hơn là sử dụng maven để chăm sóc phụ thuộc.

EDIT - một số chi tiết

Trong Hibernate 3.6 giao diện Session là trong gói org.hibernate.classic trong khi Hibernate 4.0 nó đã được chuyển đến các gói org.hibernate.

Trong Hibernate 3.6 the SessionFactory.openSession không còn trả về số org.hibernate.classic.Session, thay vì trả lại org.hibernate.Session. Đây là một trình tái cấu trúc vi phạm mã máy khách ...

+0

thực sự có cả hai giao diện 'org.hibernate.classic.Session' và' org.hibernate.Session' trong phiên bản 3 của hibernate – bestsss

+0

@bestsss - bạn nói đúng. Cả hai giao diện tồn tại trong 3.6. Chỉ SessionFactory đã được thay đổi để trả về 'org.hibernate.Session' thay vì' org.hibernate.classic.Session' - và đó là những gì phá vỡ mã máy khách. Tôi sẽ sửa câu trả lời. – yair

+0

Có cách nào để sửa lỗi này mà không hạ cấp Hibernate? – Dojo

Các vấn đề liên quan