2014-10-03 7 views
6

Ich erhalte die folgende Ausnahme mit einem Spring4/Hibernate4-Projekt, das ich von XML- in Java-Config konvertiert habe.Transaktionssynchronisierte Sitzung für aktuellen Thread nicht erhalten

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

Das Projekt startet Eigenschaft und fehlerfrei in Eclipse, aber auf die erste Anfrage erscheint die Ausnahme. In meiner ConfigRoot -Klasse habe ich @Bean konfiguriert für DataSource, SessionFactory, HibernateTransactionManager, ImprovedNamingStrategy.

Alle meine @Service Dienste sind mit @Transactional kommentiert.

Irgendeine Idee, wo das herkommen könnte?

bearbeiten 1

Wie gewünscht, hier die Stacktrace:

 
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) 

bearbeiten 2

Merkwürdigerweise lieh ich den ganzen Java-Config-Code aus einem anderen Projekt, das einwandfrei funktioniert sicherlich habe ich ein Detail übersehen. Deshalb denke ich nicht Some transaction propagations not working with Spring/Hibernate 4.

+0

Überprüfen Sie diese [SO Frage] (http://stackoverflow.com/questions/25569365/some-transaction-propagations-not-working-with-spring-hibernate-4). –

+0

Wenn Sie zumindest die Stacktrace gezeigt haben ... –

Antwort

8

gefunden Nur ... @EnableTransactionManagement wurde auf meiner Stammkonfigurationsklasse fehlt.

Vielen Dank für die Anleitung.

+0

Ich habe @EnableTransactionManagement bis jetzt nicht verwendet. Alle meine Service-Schichten und Dao-Schichten funktionierten bis jetzt einwandfrei. Plötzlich stieß ich auf dieses Problem. Außerdem hat derselbe dao eine sichere Methode und es funktioniert gut. Nur wenn ich versuche, Kriterien zu erstellen, gibt es ein Problem. Der andere dao funktioniert immer noch gut. Hast du irgendwelche Vorschläge? –

1

Ich nehme an, es ist ein Problem von Transaktions-Proxy nicht verwendet wird (nur eine Schätzung von der StackTrace). Standardmäßig verwendet spring einen Jdk-Proxy dafür, aber dafür muss der Dienst als Schnittstelle im Controller importiert werden.

Wenn dies der Fall ist, erstellen Sie eine Schnittstelle IPersonService relevante Verfahren aus PersonService enthält und importieren Sie es in PersonController als @Autowired IPersonService personService; oder noch besser, umbenennen PersonService-PersonServiceImpl und PersonService eine Schnittstelle machen.

Und ... konsequent tun, dass für alle Transaktionsdienste ...

0

Solche Szenario:

verwenden Thumb Regel:

1) Für jedes @Entity @Table (name = "Table1")

erstellen Dienstleistungen entsprechen, und entsprechende DAO.

Verwandte Themen