我试图Session
在每个请求上打开 Hibernate 并在最后关闭它。
这似乎可以工作,但我现在知道我应该如何将我的Session
对象放入ThreadLocal
并且答案没有解释这一点。
是否有任何 Struts2 特定的方法来做到这一点?
您可以在 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()。