快速后续请求后,Hibernate Session Closed Exception

rot*_*sch 1 session wicket hibernate

Caused by: org.hibernate.SessionException: Session is closed!在整个页面加载之前单击链接时出现错误(或者我的猜测,就在活动的hibernate会话中).

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

public Session getSession() {
    if (session == null || !session.isOpen()) {
        session = HibernateUtil.getSessionFactory().getCurrentSession();
    }
    return session;
}
Run Code Online (Sandbox Code Playgroud)

这是从:

public void beginTransaction() {
    transaction = getSession().beginTransaction();
}
Run Code Online (Sandbox Code Playgroud)

最后承诺:

public void commit() {
    if (transaction != null)
        transaction.commit();
    transaction = null;
    session = null;
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

axt*_*avt 6

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

实际上,getSession()不需要你方法中复杂的逻辑.当你需要SessionDAO中的电流时,你可以写sessionFactory.getCurrentSession().只要正确配置了Hibernate(参见2.3.上下文会话),它将返回当前会话的正确实例,并且您的DAO将能够提供并发查询.