Я пытался создать класс объекта с помощью 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;
}
}
Я использовал пример я нашел в каком-то учебнике. Как я могу заставить этот метод открывать сеанс, делать что-то, а затем закрывать его?
Использование 'getCurrentSession()', SF создает «сеанс» и связывает его с «текущим» контекстом (в вашем случае, вероятно, потоком). Вы не должны закрывать сеанс, полученный с помощью 'getCurrentSession()', только через 'openSession()' –