0
我試圖在每個請求上打開Hibernate Session
,並在最後關閉它。如何在Struts 2中將對象放入ThreadLocal中?
This似乎可以工作,但我現在已經想到我該如何將Session
對象放在ThreadLocal
中,答案並不能解釋這一點。
是否有任何Struts2具體的方式來做到這一點?
我試圖在每個請求上打開Hibernate Session
,並在最後關閉它。如何在Struts 2中將對象放入ThreadLocal中?
This似乎可以工作,但我現在已經想到我該如何將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();
}
}
從任何代碼
現在,爲了獲得當前Hibernate的Session,你叫SessionProviderFilter.getCurrentSession()。
Spring可以爲你管理Hibernate會話。尋找Spring OpenSessionInViewFilter。 –