В моем классе обслуживания у меня есть метод, называемый search()
. Я создаю сеанс, вызываю createQuery()
, получаю list()
, а в конце я звоню session.flush()
, но он выдает сообщение об исключении, что сеанс уже закрыт.Спящий сеанс закрыт после вызова query.list()
Другие детали:
* Я использую Hibernate 4.0.6.RELEASE
* Мой контекст сеанса устанавливается на нить
Мой код:
session = HibernateUtil.getSessionFactory().openSession();
// Build a StringBuilder that is built according to entered data
// Create the Query
Query query = session.createQuery(sql.toString());
// After this, do all the needed "query.setString(val1, val2)" stuff
// Now get the list (which does return values)
List list = query.list();
// Try to call flush on the session
session.flush(); // <---- This is where the exception is thrown (ServiceImpl.java 2716)
за исключением простых состояний:
org.hibernate.SessionException: Session is closed!
at org.hibernate.internal.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:133)
at org.hibernate.internal.SessionImpl.clear(SessionImpl.java:332)
at com.company.services.ServiceImpl.search(ServiceImpl.java:2716)
Я смотрел см., если list()
закрывает сеанс, но в других примерах я нашел close()
после этого вызова. Мой close()
находится в конечном блоке, где приведенное выше находится в блоке try.
Мой вопрос: Почему закрытие сессии при вызове флеша, если я еще не закрыл его?
Любая помощь или направление были бы очень признательны! Благодаря!
Если вы нашли его в других примерах, почему вы этого не сделали? –
@ RomanC - Я. Я просто закрываю блок 'finally'. – Ascalonian
Я не вижу этого в вопросе. –