0

我试图Session在每个请求上打开 Hibernate 并在最后关闭它。

似乎可以工作,但我现在知道我应该如何将我的Session对象放入ThreadLocal并且答案没有解释这一点。

是否有任何 Struts2 特定的方法来做到这一点?

4

1 回答 1

1

您可以在 Struts2 Servlet 前面添加一个 HttpFilter。在过滤器中:

public class SessionProviderFilter implements Filter {
    private static ThreadLocal<Session> sessionStore = new ThreadLocal<Session>();


    public void doFilter(...) {
        Session session = ... // get the session
        sessionStore.set(session);
        chain.doFilter(...);
        sessionStore.set(null);
   }

   public static Session getCurrentSession() {
        return sessionStore.get();
   }
}

现在,从任何代码中,要获取当前的休眠会话,您可以调用 SessionProviderFilter.getCurrentSession()。

于 2013-02-05T19:54:00.293 回答