如何在hibernate的过滤器中使用session.commit?

时间:2011-07-29 07:03:52

标签: java hibernate jsp servlets servlet-filters

我正在使用Hibernate和jsp来编写博客系统。 我想使用过滤器来管理会话和事务。现在我写一个过滤器:

public class SessionFilter implements Filter {

FilterConfig config;
SessionFactory sessionFactory;
Session session;

public void destroy() {

    session.getTransaction().commit();
    this.config=null;
    System.out.println("session Filter is destroyed.");

}

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    sessionFactory = (SessionFactory) config.getServletContext().getAttribute("sessionFactory");
    session = sessionFactory.getCurrentSession();
    session.beginTransaction();


    chain.doFilter(request, response);
}

public void init(FilterConfig config) throws ServletException {
    this.config=config;
    System.out.println("session Filter is inited.");

}

}

现在结果是我的表单字段没有保存到mysql。

1 个答案:

答案 0 :(得分:6)

我相信destroy()只会在容器关闭时被调用。如果您想采用这种方法,那么您可能需要将commit()放在doFilter()的末尾