2016-06-27 2 views
0

Я использую спящим режим, чтобы управлять своим взаимодействием базы данных/javaWebApplication с новыми требованиями я должен был иметь прокрутку результатов и сопоставить свои результаты запроса, я сделал этот общий класс в Java, чтобы вернуть scrollableResultsGeneric зимует прокрутку результат метод

public ScrollableResults executeCursorQuery(final String 
    queryString, final Object... params) throws PersistenceException 
    { 

    Session session = SessionFactoryUtil.getSessionFactory().openSession(); 

    SQLQuery sqlQuery = session.createSQLQuery(queryString); 

    int position = 0; 
    for (Object param: params) { 
     sqlQuery.setParameter(position, param); 
     position++; 
    } 
    ScrollableResults results = sqlQuery.scroll(); 

    return results; 
} 

я итерация по результату и карта своей информации отлично и после того, как я сделал я сделать

SessionFactoryUtil.getSessionFactory().getCurrentSession().close(); 

это работает довольно хорошо, но после нескольких обращений к этому методу происходит сбой приложения, я предполагаю, что это происходит из-за сессии открываются каждый раз, потому что Я также использую c3p0 для обработки пула соединений. Я действительно не знаю, что я нахожусь на петле здесь, если кто-то видит ошибку или знает, что я делаю неправильно, и могу указать мне в правильном направлении, это будет очень признательно.

+0

Какая база данных использует? –

+0

Обратите внимание, что существует тонкая разница между методом getSession() и openSession(). Если вы используете openSession(), закройте объект sesssion, вызвав session.close(). http://stackoverflow.com/questions/8046662/hibernate-opensession-vs-getcurrentsession –

+0

да, но мне нужно, чтобы сеанс был открыт, чтобы иметь возможность перебирать результат запроса, и я закрываю его после выполнения im, но это не так, t, похоже, работает. Я разместил строку кода, которую я использую, чтобы закрыть ее, и она должна работать, но это не так. – fr3d0

ответ

0

Завершите сеанс следующим образом. SessionFactory.openSession() всегда открывает новый сеанс. Вы должны закрыть его вот так.

session.close();

SessionFactoryUtil.getSessionFactory(). GetCurrentSession(). Close(); будет работать, только если вы установили свойство hibernate.current_session_context_class = thread. Подробнее здесь - Hibernate openSession() vs getCurrentSession()

Смежные вопросы