休眠会话工厂配置代码:-
静态会话session = null;公共静态会话getSession(Class clazz){
try {
Configuration cfg = new Configuration().configure().addAnnotatedClass(clazz);
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties());
SessionFactory sf = cfg.buildSessionFactory(builder.build());
Session session = sf.openSession();
return session;
} catch (Exception e) {
logger.info("Error in creating session with Database", e);
}
return null;
}
public static <T> List<T> findAll(Class<T> clazz) {
try {
session = getSession(clazz);
session.beginTransaction();
List<T> result = session.createQuery("from " + clazz.getName()).list();
return result;
} catch (Exception e) {
logger.info("Error at <T> List<T> findaAll in creating session with the DataBase " +e.getMessage() + " the class is " +clazz);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
return new ArrayList<>();
}
会话关闭的异常主要是在多次刷新中出现的:-
INFO:com.airtel.siva.config.ApplicationConfig-从表名称获取记录时出错:com.airtel.siva.models。圆的任务:HPorg.hibernate.SessionException:会话已关闭!在org.hibernate.internal.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:133)在org.hibernate.internal.SessionImpl.getPersistenceContext(SessionImpl.java:1994)在org.hibernate.internal.AbstractQueryImpl.isReadOnly(AbstractQueryImpl.java:272)在org.hibernate.internal.AbstractQueryImpl.getQueryParameters(AbstractQueryImpl.java:994)在org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)在com.airtel.siva.config.ApplicationConfig.findAllByCircle(ApplicationConfig.java:292)在com.airtel.siva.services.DashboardServices.getNotificationData(DashboardServices.java:1079)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java.lang.reflect.Method.invoke(Method.java:498)在org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)在org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)在org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)在org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)在org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)在javax.servlet.http.HttpServlet.service(HttpServlet.java:621)在org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)在javax.servlet.http.HttpServlet.service(HttpServlet.java:728)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.ja
and here is the result exhausted Exception which is coming in my code:-
WARN:org.hibernate.engine.jdbc.spi.SqlExceptionHelper-SQL错误:17010,SQLState:99999错误:org.hibernate.engine.jdbc.spi.SqlExceptionHelper-封闭的结果集
仅从getSession()方法返回sessionFactory。
class Util{
public static SessionFactory getSession(Class clazz) {
try {
Configuration cfg = new Configuration().configure().addAnnotatedClass(clazz);
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties());
SessionFactory sf = cfg.buildSessionFactory(builder.build());
return sf;
} catch (Exception e) {
logger.info("Error in creating session with Database", e);
}
}
}
现在在findAll()方法中:
try (Session session = Util.getSession(clazz).openSession()) {
// start a transaction
transaction = session.beginTransaction();
//rest of code
}catch(Exception ex){
}
这可能有效.. !!