会话工厂关闭异常,结果集耗尽,休眠会话工厂中出现异常

问题描述 投票:0回答:1

休眠会话工厂配置代码:-

静态会话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-封闭的结果集

java oracle hibernate spring-mvc sessionfactory
1个回答
0
投票

仅从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){
}

这可能有效.. !!

© www.soinside.com 2019 - 2024. All rights reserved.