Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate会话已关闭-帮助创建方法_Java_Hibernate_Session - Fatal编程技术网

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

Java Hibernate会话已关闭-帮助创建方法,java,hibernate,session,Java,Hibernate,Session,我试图用HibernateSQL方法创建对象类,比如添加新记录、从数据库获取数据等。一切都很好,但只有一次。当我再次尝试调用相同的方法时,会出现“会话已关闭”错误。下面是选择一种记录方法的代码: public static Event getSqlRecord(int id) { SessionFactory session = HibernateSessionFactory.getSessionFactory(); Session sess = session.getCurre

我试图用HibernateSQL方法创建对象类,比如添加新记录、从数据库获取数据等。一切都很好,但只有一次。当我再次尝试调用相同的方法时,会出现“会话已关闭”错误。下面是选择一种记录方法的代码:

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;
}
}

我使用了一些教程中的示例。如何使此方法执行open session、do stuff然后关闭它?

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

上下文/事务将负责为您关闭它。

使用
getCurrentSession()
,SF创建一个
会话
,并将其固定到“当前”上下文(在您的情况下可能是一个线程)。您不应该关闭通过
getCurrentSession()
获得的会话,而应该仅通过
openSession()