我正在尝试在每个请求上打开Hibernate Session
并在最后关闭它。
This似乎可行,但我现在知道如何将Session
对象放入ThreadLocal
并且答案没有解释。
是否有任何Struts2特定的方法来执行此操作?
答案 0 :(得分: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();
}
}
现在从任何代码获取当前的hibernate会话,都可以调用SessionProviderFilter.getCurrentSession()。