2014-10-03 65 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。

相关问题