Начало сессии закрыто. Весна +JPA /Hibernate+Maven
Привет всем Я использую Spring+Jpa/Hibernate+Maven и пытаюсь получить запись из БД. поэтому, когда я ром мое приложение получает ошибку, как
SEVERE: Servlet.service() для сервлета [Spring MVC Dispatcher Servlet] в контексте с путем [/SpringHibernateMaven] выдало исключение [Ошибка обработки запроса; Вложенное исключение: org.hibernate.SessionException: Сессия закрыта!] с коренной причиной org.hibernate.SessionException: Сессия закрыта! в org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:49) в org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1621) в com.cdis.flod.dao.UserDao.jameUser: 28) в com.cdis.flod.service.impl.UserServiceImpl.getUserByName(UserServiceImpl.java:46) в com.cdis.flod.web.LoginController.userLogin(LoginController.java:42) в sun.reflect.Nor invoke0(нативный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:lan.re..f. 590.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) в org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) в org.springframework.web.Inter.HernetRean RequestMappingHandlerAdapter.java:578) в org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) в org.springframework.web.servlet.Disparter для диспетчера службы доставки (0).springframework.web.servlet.DispatcherServlet..java:789) по адресу javax.servlet.http.HttpServlet.service(HttpServlet.java:641) по адресу javax.servlet.http.HttpServlet.service(HttpServlet.java:722) в org.apache.catalina.Cter.Acore.Cter.Acin.Cter.Acin.Cter.Acin.internalDoFilter(ApplicationFilterChain.java:305) в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) в org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java.2ina.cat) или org.core.StandardContextValve.invoke(StandardContextValve.java:123) в org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) в org.apache.catalina.core.Standardostalve (StandardHost) () в org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) в org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) в org.apache.catalina.core.Stand.invoke(StandardEngineValve.java:118) в org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) в org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.gava: atg..coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) в org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) в java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) в java.util.concurrent.ThreadPoolExecutor$Worker.run(). на java.lang.Thread.run(Thread.java:662)
и вот кусок кода
public class AbstractDao<T> {
/** entity manager */
@PersistenceContext(unitName = "dbschema")
protected EntityManager entityManager;
public Session getHibernateSession() {
return (Session) this.entityManager.getDelegate();
}
@Repository
открытый класс UserDao расширяет AbstractDao {
public User getUserByName(String userName) {
Query hqlQuery = getHibernateSession().createQuery("from User where userName=:name").
setString(RequestParameters.name.name(), userName);
return (User)hqlQuery.setMaxResults(1).uniqueResult();
}
}
1 ответ
Код ниже работал для меня:
public class AbstractDao<T> {
/** entity manager */
@PersistenceContext(unitName = "dbschema")
protected EntityManager entityManager;
public Session getHibernateSession() {
return ((Session) this.entityManager.getDelegate()).getSessionFactory().openSession();
}
@Repository