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
Hibernate会话在快速后续请求后关闭异常_Hibernate_Session_Wicket - Fatal编程技术网

Hibernate会话在快速后续请求后关闭异常

Hibernate会话在快速后续请求后关闭异常,hibernate,session,wicket,Hibernate,Session,Wicket,我得到一个由以下原因引起的:org.hibernate.SessionException:会话已关闭在加载整个页面之前单击链接时出错(或者我猜,就在活动的hibernate会话中) 我所有的DAO类都是子类化的GenericDAO,我从中得到了这个方法: public Session getSession() { if (session == null || !session.isOpen()) { session = HibernateUtil.getSessionFa

我得到一个由以下原因引起的
:org.hibernate.SessionException:会话已关闭在加载整个页面之前单击链接时出错(或者我猜,就在活动的hibernate会话中)

我所有的DAO类都是子类化的
GenericDAO
,我从中得到了这个方法:

public Session getSession() {
    if (session == null || !session.isOpen()) {
        session = HibernateUtil.getSessionFactory().getCurrentSession();
    }
    return session;
}
这称为:

public void beginTransaction() {
    transaction = getSession().beginTransaction();
}
最后承诺:

public void commit() {
    if (transaction != null)
        transaction.commit();
    transaction = null;
    session = null;
}

我在这里遗漏了什么吗?

看起来您对所有请求都使用了DAO的一个实例。但是,DAO试图在其字段中存储当前的
会话
,因此无法处理并发请求。请注意,
Session
不是线程安全的,您应该为不同的请求使用不同的
Session
s


实际上,不需要使用
getSession()
方法中的复杂逻辑。当您需要DAO中当前的
会话时,只需编写
sessionFactory.getCurrentSession()
。只要正确配置Hibernate(请参阅),它将返回当前会话的正确实例,并且DAO将能够提供并发查询。

看起来所有请求都使用DAO的单个实例。但是,DAO试图在其字段中存储当前的
会话
,因此无法处理并发请求。请注意,
Session
不是线程安全的,您应该为不同的请求使用不同的
Session
s


实际上,不需要使用
getSession()
方法中的复杂逻辑。当您需要DAO中当前的
会话时,只需编写
sessionFactory.getCurrentSession()
。只要正确配置Hibernate(请参阅),它将返回当前会话的正确实例,并且您的DAO将能够提供并发查询。

非常感谢,它是线程不安全的。我更改了代码,从那以后,我无法在疯狂地点击所有链接时重现异常。顺便说一句,我从DAO/POJO创建者工具中获得了getSession()-方法……非常感谢,它是线程不安全的。我更改了代码,从那以后,我无法在疯狂地点击所有链接时重现异常。顺便说一句,我从DAO/POJO创建者工具获得了getSession()方法。。。