2014-10-03 74 views
6

我將從xml轉換爲Java-Config的Spring4/Hibernate4項目收到以下異常。無法獲得當前線程的事務同步會話

org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread 

項目在Eclipse中啓動屬性和errorfree,但在第一個請求中出現Exception。在我的ConfigRoot -class中,我有@Bean,配置爲DataSource,SessionFactory,HibernateTransactionManager,ImprovedNamingStrategy

我所有的@Service服務都注有@Transactional

任何想法可能來自哪裏?

編輯1

按照要求,這裏的堆棧跟蹤:

 
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 

org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread 
    org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:134) 
    org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014) 
    employees.service.PersonService.getAllInHierarchcalOrder(PersonService.java:58) 
    employees.controller.PersonController.getPersons(PersonController.java:64) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:606) 
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) 
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721) 
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 

編輯2

奇怪的是,我借了整個Java的配置代碼從另一個項目,它完美的作品,當然我錯過了一個細節。這就是爲什麼我不考慮Some transaction propagations not working with Spring/Hibernate 4

+0

檢查此問題[SO問題](http://stackoverflow.com/questions/25569365/some-transaction-propagations-not-working-with-spring-hibernate-4)。 – 2014-10-03 13:07:38

+0

如果您至少顯示了堆棧跟蹤... – 2014-10-03 13:09:17

回答

8

只是覺得...... @EnableTransactionManagement是缺少對我的根配置類。

感謝大家的指導。

+0

直到現在我還沒有使用@EnableTransactionManagement。直到現在,我所有的服務層和dao層都能正常工作。突然間我遇到了這個問題。而且,同一個dao有一個保存方法,並且它工作正常。只有當我嘗試創建標準時,它纔會產生問題。另一個dao仍然工作正常。你有什麼建議嗎? – 2017-12-11 10:24:08

1

我認爲這是一個事務代理沒有被使用的問題(只是來自stacktrace的猜測)。默認情況下,spring爲它使用Jdk代理,但需要在服務器中導入作爲接口

如果是的話,從PersonService創建一個包含相關方法的接口IPersonServicePersonController作爲@Autowired IPersonService personService;甚至更​​好的導入,重命名PersonServicePersonServiceImpl,並PersonService的接口。

而且......一直做你的所有交易服務...

0

這樣的情景:

使用此經驗法則

1)對於每一個@Entity @Table(name = 「表1」)

創建相應的服務及相應的DAO。

相關問題