Hibernate会话已关闭 - 帮助创建方法

时间:2014-02-03 15:20:36

标签: java hibernate session

我试图用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;
}
}

我正在使用我在一些教程中找到的示例。我如何让这个方法做开放会话,做东西然后关闭它?

1 个答案:

答案 0 :(得分:0)

使用sessionFactory.getCurrentSession()时不需要关闭会话;

上下文/交易将负责为您关闭它。