2014-02-03 8 views
0

Я пытался создать класс объекта с помощью hibernate sql-методов, таких как добавление новой записи, получение данных из базы данных и т. Д. Все работает нормально, но только ONCE. Когда я пытаюсь снова вызвать тот же метод, я получаю сообщение «Сессия закрыта». Вот код выбора метода один рекорд:Спящий сеанс закрыт - метод создания справки

public static Event getSqlRecord(int id) { 
    SessionFactory session = HibernateSessionFactory.getSessionFactory(); 
    Session sess = session.getCurrentSession(); 
    Transaction tx = sess.beginTransaction(); 


    Event ev = new Event(); 
    try { 
     Query query = sess.createQuery("from Event where idWydarzenia = :id"); 
     query.setParameter("id", id); 
     ev = (Event)query.uniqueResult(); 
    } finally { 
     session.close(); 
    } 
    session.close(); 

    return ev; 
} 

О HibernateSessionFactory, вот тело класса:

package pl.objects; 

import org.hibernate.SessionFactory; 
import org.hibernate.cfg.AnnotationConfiguration; 

@SuppressWarnings("deprecation") 
public class HibernateSessionFactory { 
private static final SessionFactory sessionFactory; 

static { 
    try { 
     sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); 
    } 
    catch (Throwable ex) { 
     System.out.println("Blad inicjalizacji SessionFactory" + ex); 
     throw new ExceptionInInitializerError(ex); 
    } 
} 

public static SessionFactory getSessionFactory() { 
    return sessionFactory; 
} 
} 

Я использовал пример я нашел в каком-то учебнике. Как я могу заставить этот метод открывать сеанс, делать что-то, а затем закрывать его?

+0

Использование 'getCurrentSession()', SF создает «сеанс» и связывает его с «текущим» контекстом (в вашем случае, вероятно, потоком). Вы не должны закрывать сеанс, полученный с помощью 'getCurrentSession()', только через 'openSession()' –

ответ

0

Вы не обязаны закрывать сеанс при использовании sessionFactory.getCurrentSession();

Контекст/сделка позаботится о его закрытии.

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